How Designs Differ

Оригинал: Rebecca J. Wirfs-Brock
http://www.wirfs-brock.com/PDFs/How%20Designs%20Differ.pdf

В данной статье мы рассмотрим как, чем и почему отличаются между собой Responsibility-Driven design метод и немного улучшенная версия Shlaer/Mellor метода, Data-Drive design метод.

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

Дизайнеры спроектировали упрощенную систему пивоварни. Они намеренно не брали в внимание пользовательский интерфейс и операционную систему. Они ограничили модель только поведениями объектов системы, которые имели тип int, bool, char или string.

Имена объектов одинаковы для обоих методов: Чан, Партия, Клапан, Рецепт, Ингредиент. Даже классы, управляющие передвижениями партий, имеют схожие имена. Однако, процессы выполнений заданий сильно отличаются.
На рисунке ниже можно увидеть перевозку партии в случае Data-driven design.
На рисунке ниже можно увидеть перевозку партии в случае Responsibility-driven design.

На объекты, которые используются другими объектами, указывает стрелка. Объекты, заключенные в прямоугольник, представляют работу. Объекты, состояние которых установлено или запрошено, заключены в овал

Responsibility-Driven ClassСтереотипыData-Driven ClassСтереотипы
Порядок перевозкиКоординаторЗапланированная перевозкаКонтролер
Система трубОбсепечивает сервисКонтейнерВладеет информацией
ЧанВладеет информациейЧанОбеспечивает сервис
КлапанВладеет информацией
Обеспечивает сервис
Клапан и cоединительВладеет информацией
ПартияВладеет информациейДействующая партияВладеет информацией
НасосОбеспечивает сервисНасосОбеспечивает сервис
ПивоварняКоординаторПивоварКонтролер
ТрубаВладеет информациейТрубаВладеет информацией

Chidamber и Kermerer предложили 7 базовых мер, которые сравнивают различные методы дизайна:

  • Weighted Methods per Class (WMC) мера сложности класса, задается сложностью его атрибутов и методов
  • Depth of Inheritance (DIT) для класса определяет число его классов-предков
  • Number of Children (NOC) для класса определяет число его детей-классов
  • Coupling between Objects (CBO) для класса показывает число классов, которые он использует
  • Response For a Class (RFC) для класса показывает число его собственных методов и методов, которые он вызывает
  • Lack of Cohesion in Methods (LCOM) является мерой степени сходства между методами
  • Weighted Attributes per Class (WAC) число атрибутов класса, взвешенных по их размеру


На рисунке ниже мы можем явно увидит разницу в количестве требуемых сообщений

Это происходит из-за того, что в Data-Driven методе два класса Пивовар и Запланированная перевозка отправляют много сообщений и знают много о других объектах. В Responsibility-Driven методе основные задания распределены между несколькими классами. Как раз этот принцип с более высоким уровнем коммуникации привел к большинству различий в методах.

Основные различия между этими методами:

Responsibility-driven designData-driven design
делегированный стиль управленияцентрализованная архитектура управления
несколько 'умных' объектов, которые смешивают стереотипымного простых 'владельцев информации'
используют координаторы, а не контролеровнастройка контролеров и запрос к владельцам информации
меньше сообщенийбольше низкоуровневых сообщений
наследственное поведениенаследственные атрибуты

1. R. Sharble and S. Cohen, “The Object-Oriented Brewery: A Comparison of Two Object- Oriented Development Methods,” pp. 60-73, Software Engineering Notes, vol. 18 (2).
2. R. Sharble and S. Cohen “the Object-Oriented Brewery: A Comparison of Two Object- Oriented Development Methods,” Boeing Technical Report no. BC2-G4059, October, 1992.