2010-02-02 4 views
4

Я разрабатываю приложение, и я не могу указать правильный дизайн для него. У меня есть один в моем сознании, но он, похоже, не является частью шаблона GOF, и поэтому я не уверен, что это хороший способ пойти.Вопрос о шаблоне дизайна

Мой проект создает данные из любого из возможных 15-20 документов (все документы одного типа, но данные могут широко варьироваться). Как только данные будут получены, его необходимо отформатировать в любом из поддерживаемых 4 форматов и отобразить. Кроме того, чтобы усложнить дело, хотя сами документы широко классифицируются по 4-5 типам, некоторые из документов (по этим классификациям) отформатированы аналогичным образом.

Теперь я разделить его следующим образом:

  • Создание данных
  • Отображение данных

создания данных создает объект данных интерфейса с общим интерфейсом, который может обрабатывать все эти документы.

Отображение данных считывает объект данных и отображает его так, как требуется.

Мой первый вопрос: Я не видел такого объекта интерфейса в наборе шаблонов GOF. Это хорошее дизайнерское решение, чтобы иметь такую ​​вещь?

Как я уже упоминал ранее, только два документа отформатированы аналогичным образом - по классификациям. Проблема здесь в том, что другие документы, которые должны были быть отформатированы аналогичным образом, - нет. Итак, я обнаружил, что клонирую код в одном сценарии, получая данные, чего я не хочу.

Итак, мой второй вопрос - Каков наилучший способ справиться с этим?

Буду очень благодарен, если кто-то может помочь мне здесь.

+0

Не могли бы вы привести несколько примеров входов и выходов? Это облегчило бы нам обращаться с вещами. – APC

+0

Я думаю, что слишком рано думать о шаблонах. Попытайтесь запустить рабочий прототип сначала IMO – Perpetualcoder

+0

Собственно, прототип работает - и я пытаюсь сделать его готовым к производству :-) – Koran

ответ

5

Не пытайтесь толчком слишком трудно шаблона заранее. Выделите несколько рисунков, а затем попробуйте показать узоры в них. Шаблоны предназначены для общения и могут рассматриваться как многоразовые для какой-либо конкретной проблемы.

Так что ваша широкая проблема в том, что у вас есть X-документы и Y-рендеринг.

  • Попробуйте создать иерархию классов для документов, которые имеют смысл. Вероятно, вы можете использовать некоторую логику в базовом классе или использовать интерфейс
  • Если вы не можете найти интерфейс для абстрагирования всех типов документов, вы можете положиться на адаптеры , чтобы адаптировать различные документы к данным интерфейс
  • Чтобы иметь несколько рендеров, вы можете посмотреть на посетителем рисунка, декоратора рисунка или стратегий шаблона, или использовать только простую наследования/полиморфизм с Y визуализацией, который реализует тот же интерфейс , Это зависит от характера вариаций.
  • Чтобы получить правый рендер в соответствии с прецедентом, вы можете использовать фабрику , чтобы внедрить логику принятия решения и создания экземпляра.

Модели GoF имеют меньшую детализацию, чем ваша проблема. Вам нужно будет разработать дизайн, который соответствует вашему конкретному требованию. В случае сомнений всегда выбирайте дизайн, который является простейшим/более интуитивно понятным. Нет их одного с большинством шаблонов и причудливой иерархии классов.

Мои 2 цента

+0

Я действительно думал о наличии адаптера вместо объекта интерфейса, но я остановился, потому что он казался излишним. В настоящее время я полагаюсь на шаблон фабрики для части нескольких рендерингов. Не могли бы вы предположить, что я перехожу к адаптеру вместо объекта интерфейса? – Koran

+0

Пойдите для простейшего, который, вероятно, является интерфейсом в вашем случае. Однако обратите внимание, что, не зная, какие документы и каков рендеринг на самом деле, это трудно произносить. Но если у вас что-то работает, и оно непротиворечиво и относительно просто (что, кажется, ваше дело), ​​то это может быть * достаточно хорошим *. Нет * идеального * дизайна. – ewernli

0

Ваш объект интерфейса может быть описан с помощью шаблона Facade или Adapter. Не беспокойтесь слишком много, если нет прямого соответствия с существующим шаблоном проектирования - ваше описанное решение - лучший способ пойти.

Для второго вопроса вы можете иметь базовый класс, который реализует функциональные возможности, общие для всех классов. Затем расширьте его для всех особых потребностей. Я знаю, что книги рекомендуют предпочитать композицию над наследованием, но это не строгое правило, и есть случаи, когда наследование является хорошим решением.

1

Звучит как шаблон стратегии, с общим приложением MVC с вырожденным контроллером.

+0

Согласен. Настройте стратегии для работы с различными форматами документов, затем получите доступ к ним через модель, используя контроллер для организации создания ваших данных в представлении. –

+0

Одна из проблем заключается в том, что у меня есть только две страницы, похожие (и они относятся к базовым классификациям). Все остальное зависит от классификации и некоторых других типов документов. Поэтому я не уверен, как использовать шаблон стратегии здесь. – Koran

0

Вы думали о шаблоне строитель для создания данных

строитель Intent

Самостоятельное строительство сложного объекта от его представления так, что тот же самый процесс строительства может создавать различные представления.

для отображения вы можете использовать различный декораторы

Смежные вопросы