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 design | Data-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.