Дизайн шаблонов путаницы - PullRequest
0 голосов
/ 02 ноября 2011

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

http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs

Если вы посмотрите на листинг 7 и далее, автор говорит, что он использует шаблон декоратора. Однако является ли один из основных принципов этого шаблона для обертывания объектов и ДОБАВИТЬ обязанности и поведение?

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

У меня есть это правильно или нет? Если я ошибаюсь, может кто-нибудь объяснить, почему?

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Я согласен с вами, это выглядит как шаблон адаптера , то есть ModelStateDictionary абстрагируется за интерфейсом IValidationDictionary (интерфейс адаптера) с использованием конкретного типа (адаптер) таким образом, что реализация может быть изменена позже.

Шаблон Decorator обычно предоставляет дополнительные функциональные возможности посредством композиции, предоставляя тот же интерфейс, что и оформленный тип.Обычно это делается с помощью подклассов или реализации интерфейса.

Примером декоратора может быть:

  1. у вас есть класс репозитория, который выбирает «объекты» из базы данных
  2. у вас есть класс декоратора хранилища, который может кэшировать объекты без необходимости каждый раз извлекать их из базы данных.Этот класс декоратора обеспечивает выборку и извлечение из кэша посредством композиции путем подклассификации исходного класса репозитория и переопределения метода Get() для первой проверки кэша для элемента (и Save() будет переопределен, чтобы также обновить кэш, а такжебазы данных).
2 голосов
/ 02 ноября 2011

Я думаю, что вы правы, и что в сообщении есть ошибка.Из статьи:

Шаблон Decorator позволяет обернуть существующий класс в новый класс для реализации интерфейса.

Это не совсем так - декораторы делаютпозволяют вам обернуть одну реализацию в другую, но обычно целью является не реализация другого интерфейса, а «украшение» экземпляра новыми функциями.Шаблон адаптера позволяет использовать два разных интерфейса и изменять один экземпляр так, чтобы он был похож на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...