Разница между чистым изготовлением и косвенностью

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

Чистая фабрикация и косвенные действия создают и распределяют обязанности для промежуточного объекта, поэтому кто-нибудь может объяснить, в чем разница между этими шаблонами проектирования?

Спасибо!

2 ответа

Вы используете Indirection, если хотите создать более низкую связь между компонентами. Пример, предложенный Ларманом в разделе "Применение UML и шаблонов", представляет собой класс TaxCalculatorAdapter. Чтобы защитить клиентов от необходимости знать внутреннюю работу возможного адаптера, он скрывает их с косвенным указанием, только выставляя необходимый API. Эта косвенность будет тесно связана с адаптированными, но только слабо связана с клиентами.

PersistentStorage от Pure Fabrication действительно является Indirecton (так утверждает Ларман в книге) в том смысле, что он обеспечивает более низкую связь. Pure Fabrication выходит за рамки этого, хотя и в том, что создает объекты, которые не являются частью вашей доменной модели.

Пример, который приводит Ларман, является классом домена. Sale, поскольку Sale имеет все данные для сохранения, он был бы кандидатом на логику для сохранения продажи (информационный эксперт). Однако логика постоянства не связана с концепцией продажи, поэтому класс станет непоследовательным. Кроме того, связывая продажу с конкретным API БД, вы ограничиваете повторное использование (косвенное обращение к спасению). А поскольку сохранение является обычным делом, вы, вероятно, также дублируете код в объектах, которые также необходимо сохранить. Чтобы избежать этого, вы что-то придумываете (чистое изготовление), то есть вы создаете что-то, что не является частью модели предметной области (здесь: PersistentStorage), но все же фиксирует существенную активность в вашем приложении.

Таким образом, Pure Fabrication - это специализация, точнее, вариант Indirection.

Чистое изготовление и косвенность являются принципами GRASP. Следующие примеры в этой статье dzone могут прояснить ваше представление о pure fabrication а также indirection,

Чистое Изготовление:

Мы знаем, что модель домена для банковской системы содержит такие классы, как Account, Branch, Cash, Check, Transaction и т. д. Доменные классы должны хранить информацию о клиентах. Чтобы сделать это, можно делегировать ответственность за хранение данных классам домена. Эта опция уменьшит связность классов домена (более чем одна ответственность). В конечном итоге этот вариант нарушает SRP принцип.

Другой вариант - ввести другой класс, который не представляет никакой концепции домена. В примере банковского дела мы можем ввести класс под названием, PersistenceProvider, Этот класс не представляет какой-либо предметной области. Целью этого класса является обработка функций хранения данных. Следовательно PersistenceProvider это чистая выдумка.

Косвенность:

Этот принцип отвечает на один вопрос: как вы заставляете объекты взаимодействовать таким образом, чтобы связь между ними оставалась слабой?

Решение таково: возьмите на себя ответственность за взаимодействие с промежуточным объектом, чтобы связь между различными компонентами оставалась низкой.

Например, программное приложение работает с различными конфигурациями и параметрами. Чтобы отделить код домена от конфигурации, добавляется определенный класс, что показано в следующем листинге:

Public Configuration{
  public int GetFrameLength(){
    // implementation
  }
  public string GetNextFileName(){
  }
 // Remaining configuration methods
}

Таким образом, если какой-либо объект домена хочет прочитать определенный параметр конфигурации, он запросит объект класса Configuration. Таким образом, основной код отделен от кода конфигурации.

Если вы прочитали Принцип чистого производства, этот класс конфигурации является примером чистого производства. Но целью косвенного обращения является создание разъединения. С другой стороны, цель чистого изготовления состоит в том, чтобы поддерживать доменную модель в чистоте и представлять только доменные концепции и обязанности.

Многие шаблоны проектирования программного обеспечения, такие как Adapter, Facade, а также Observer являются специализациями принципа косвенности.

Чистый производственный класс - это тип класса, который не предназначен для спроектированной проблемной области. Этому классу присваивается высокая степень сцепления ^, низкая связь и повторное использование. Направление Это решает проблему распределения ответственности за отсутствие прямой связи между вещами. Это также обеспечивает низкую связь между объектами и поддерживает более высокие возможности проживания.

Другие вопросы по тегам