Есть ли шаблон дизайна для этого - PullRequest
0 голосов
/ 27 октября 2011

У меня есть следующий домен, досье с документами:

-Dossier(Name,Documents[])
-Document(Name)

Теперь есть новый реквизит для нескольких досье, которые имеют темы, и у каждого предмета есть документы, поэтому новый домен будет таким:

-Dossier(Name,Subjects[])
-Subject(Number,Documents[])
-Document(Name)

Для этих нескольких досье (7%) я должен изменить простой дизайн на более сложный.Мой вопрос: есть шаблон дизайна или любая идея, которую я могу использовать для поддержки предметов, но избегая изменения исходного домена.

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Я думаю, вы ищете Pattern Decorator .

Здесь также можно найти составной шаблон или шаблон делегирования .

1 голос
/ 27 октября 2011

Вы можете просто сохранить ссылки / ссылки из Досье на и коллекцию Субъектов и коллекцию Документов (так было бы -Досье (Name, Documents [], Subjects [])) и реализовать некоторые правила проверки на уровне БД / языка программирования, например: когда коллекция Subjects не пуста в Dossier , в этом досье не может быть документов (собрание документов должно быть пустым). Таким образом, вы изменяете свою модель только с добавлением без фактического изменения или удаления чего-либо существующего.

В качестве альтернативы вы можете создать базовый класс Досье , который имеет имя и два подкласса: DossierWithSubject (с коллекцией предметов) и DossierWithoutSubject (с коллекцией документов ) где последнее именно то, что у вас было до сих пор. Так что просто создайте / обработайте ваши текущие досье как DossiersWithoutSubject.

Надеюсь, что-нибудь из этого было полезно.

0 голосов
/ 27 октября 2011

Есть много вещей, которые следует учитывать при выборе шаблона

Если дизайн динамически изменяется в соответствии с контекстом, внешним по отношению к консолью Dossier Делегирование шаблон ( wiki )).

Если это должно быть установлено на этапе «строительства» или «инициализации», вы можете рассмотреть pimpl ( www.codeproject.com ) или Декоратор ( wiki ) pattern

Или, может быть, вам нужно что-то другое ...

Выбранное решение должно зависеть от конкретной проблемы, которую вам нужно решить,Два простых правила:

  1. Композиция Favor вместо наследования
  2. Инкапсуляция изменчивости

1) Означает делегат для работы с компонентами.Каждый cpmponent должен выполнять «одну вещь», но делать это хорошо.

2) Означает, что в вашей системе есть часть, которая может быть изменена - заключить ее в отдельную сущность (-и)

Для вводного материала в шаблонах проектирования я мог бы порекомендовать вам "книгу четырех банд" Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения

...