«Мартина ФаУflера Предметно-ориентированное П оекти ОБ иие еТРУКТУРИ3АЦИЯ елО жныIx ПРО rPAMMHbIX СИ еТЕМ Domain -Driven Design TACKLING COMPLEXITY IN ТНЕ HEART OFSOFTWARE Eric Evans Addison-Wesley ...»
Команда (command), или модификатор (modifier). Операция, вносящая в систему какое-то изменение, например, устанавливающая значение переменной. Операция, создающая намеренный побочный эффект .
Концептуальный контур (conceptual contour). Внутренняя согласованность самой предметной области, которая, будучи отражена в модели, помогает более естественно модифицировать архитектуру .
Контекст (context). Окружение, в котором фигурирует слово или утверждение и ко торое определяет их смысл. См. Ограниченный контекст (bounded context) .
Карта контекстов (context тар). Представление ОГРАНИЧЕННЫХ КОНТЕКСТОВ ( BOUNDED CONTEXTS), задействованных в проекте, вместе с фактическими связями меж ду ними и их моделями .
Смысловое ядро (core domain). Четко выделяемая часть модели, наиболее сущест венная для достижения целей пользователя программы, которая придает программе ценность и отличает ее от других .
1 Из соображений удобства поиска 110 оригинальному термину в глоссарии сохранен алфавит ный порядок английского текста. Следует учитывать это при поиске по ссылкам. - Прuмеч. перев .
Declarative design (декларативное проектирование). Форма программирования, в которой точное описание свойств объектов реально служит для управления програм мой - фактически исполняемая спецификация .
Углубленная модель (deep model). Четкое и выразительное представление основных задач и интересов специалистов в предметной области, а также наиболее существенных знаний о ней. В углубленной модели отбрасываются поверхностные аспекты проблемы и наивные ее интерпретации .
Архитектурный шаблон, или образец (design pattem). Описание взаимодействую щих друг с другом объектов и классов, приспособленных к решению общей архитектур ной задачи в конкретном контексте [ 14], с. З .
Дистилляция (distillation). Процесс разделения компонентов смеси для выделения главного компонента в такой форме, которая делает его важным и ценным. В области проектирования программного обеспечения - абстрагирование ключевых аспектов мо дели или проведение границ в большой системе с целью выделения ее СМЫСЛОВОГО ЯДРА (CORE DOMAIN) .
Предметная область (domain). Отрасль или сфера знаний, влияния, деятельности .
Специалист в предметной области (domain expert). Участник проекта по разработке программного обеспечения, специализирующийся не в программировании, а в той об ласти, в которой программа должна применяться. Специалист - это не просто рядовой пользователь программы, а носитель глубоких знаний о предмете .
Уровень предметной области (domain layer). Та часть архитектуры и программной реа лизации, которая отвечает за алгоритмизацию предметной области в МНОГОУРОВНЕВОЙ АРХИТЕКТУРЕ (LAYERED ARCHITECTURE). Именно на уровне предметной области реализуется программное выражение модели предметной области .
Сущность (entity). Объект, суть которого определяется не его атрибутами, а непре рывностью существования и идентификации .
Фабрика (factory). Механизм обслуживания клиента, инкапсулирующий сложные алгоритмы создания и абстрагирующий тип создаваемого объекта .
Функция (function). Операция, вычисляющая и возвращающая результат без наблю даемых побочных эффектов .
Неизменяемый (immutabIe). Обладающий свойством никогда не изменять своего на блюдаемого состояния после создания .
Неявное понятие (implicit concept). Понятие, необходимое для понимания модели или архитектуры, но не упоминаемое в них .
Информативный интерфейс (intention-revealing interface). Архитектура, в которой имена классов, методов и других элементов четко описывают, для чего их создавал ис ходный разработчик, а также для чего ими может пользоваться разработчик-клиент .
Инвариант (invariant). КОНТРОЛЬНОЕ УТВЕРЖДЕНИЕ (ASSERTION) относительно не которого элемента архитектуры, которое должно быть истинным всегда, кроме специфи ческих переходных состояний, таких как процесс выполнения метода или незавершен ной транзакции базы данных .
Итерация (iteration). Процесс, в котором программа постепенно совершенствуется маленькими шагами. Та'Кже один из таких шагов .
Крупномасштабная структура (Iarge-scale structure). Набор высокоуровневых по нятий, правил, или того и другого, задающий образец для проектирования всей системы .
Язык, позволяющий обсуждать и воспринимать систему крупными блоками .
434 ГЛОССАРИЙ Многоуровневая архитектура (layered architecture). Способ изоляции друг от друга выполняемых в программной системе задач - в числе прочего, способ выделения уровня предметной области .
Цикл существования (life cycle). Последовательность состояний объекта, которые он может принимать от момента создания до момента удаления - обычно вместе со связя ми-ограничениями, которые гарантируют его целостность при переходе от одного со стояния к другому. Может включать миграцию СУЩНОСТИ (ENTITY) между системами и разными ОГРАНИЧЕННЫМИ КОНТЕКСТАМИ (BOUNDED CONTEXTS) .
Модель (model). Система абстракций, которая описывает избранные аспекты пред метной области и может использоваться для решения задач, относящихся к этой области .
Проектирование по модели (model-driven design). Проектирование архитектуры, при котором соблюдается максимально точное соответствие между некоторым подмножеством элементов программы и элементами модели. Также, процесс совместной разработки моде ли и ее программной реализации с сохранением такого соответствия между ними .
Парадигма моделирования (modeling paradigm). Оригинальный стиль построения понятий в предметной области в сочетании со средствами создания программных анало гов этих понятий (например, объектно-ориентированное программирование и логиче ское программирование) .
Хранилище (repository). Механизм для инкапсулирования средств хранения, извле чения и поиска объектов в виде некоторой совокупности .
Обязанность (responsibility). Возложенное на кого-либо или что-либо обязательство выполнять определенную задачу или владеть информацией [24 ] .
Служба (service). Операция, предлагаемая в виде интерфейса и находящаяся в моде ли автономно, без инкапсулируемого состояния .
Побочный эффект (side effect). Любое наблюдаемое изменение состояния в резуль тате некоторой операции - неважно, намеренное или нет, пусть даже от предумышлен ной модификации данных .
Функция без побочных эффектов (side-effect-free function). См. Функция (function) .
Изолированный класс (standalone class). Класс, который можно воспринимать и тестировать без всякой связи с другими классами, если не считать систеrvIНЫХ прими тивов и базовых библиотек .
Без состояния (stateless). Свойство элемента архитектуры, позволяющее клиент скому коду пользоваться его операциями, не обращая внимания на историю изменений .
Элемент без состояния может использовать информацию, доступную глобально, и даже изменять ее (т.е. иметь побочные эффекты), но не содержит никакого закрытого состоя ния, которое бы влияло на его поведение .
Стратегическое проектирование (strategic design). Принятие модельных и архитек турных решений, касающихся крупных частей системы. Такие решения оказывают влия ние на весь проект и должны приниматься на уровне всей группы разработчиков в целом .
Гибкая архитектура (supple design). Архитектура программы, которая вкладывает всю силу, заключенную в углубленной модели (deep model) в руки разработчика клиент ского кода, помогая ему четко и гибко выражать идеи и выдавать устойчивые, ожидаемые результаты. Не менее важно, что та же самая модель применяется и для того, чтобы об легчить ее реализатору модификацию или перестройку архитектуры для адаптации но вых знаний и выводов .
ГЛОССАРИЙ Единый язык (ubiquitous language). Язык, структурированный в соответствии с мо делью предметной области и используемый всеми разработчиками для координации ра бот группы над программным проектом .
Унификация (unification). Внутренняя согласованность модели, при которой все термины имеют единообразные значения, а в правилах нет противоречий .
Объект-значение (value object). Объект, описывающий некоторую характеристику или атрибут, но не передающий понятий и не имеющий индивидуальности .
Целостный объект-значение (whole value). Объект, моделирующий отдельное, за конченное понятие .
436 ГЛОССАРИЙ СПИСОК ЛИТЕРАТУРЫ
[ 1 ] Alexander С., Silverstein М., Angel S., Ishikawa S., Abrams О. The Oregon Experiment, Oxford University Press, 1975 .
[2] Alexander С., Ishikawa S., Silverstein М. А Pattem Langua{!;e : Towns, Buildings, Constmction, Oxford University Press, 1 977 .
[3] Alur D., Crupi ]., Malks О. CoreJ2EE Pattems, Sun MicrosysteIlls Press, 200 1 .
[4] Beck К. Smalltalk Best Practice Pattems, Prentice НаН PTR, 1 997 .
[5] Beck К. Extreme Programming Explained: Embrace Change, Addison-Wesley, 2000 .
[6] Beck К. Test-Driven Development: Ву Example, Addison-Wesley, 2003 .
[7] Buschmann F., Meunier R., Rohnert Н., Sommerlad Р., Stal М. Pattem- Oriented So/tware Architecture: А System о/ Pattems, Wiley, 1 996 .
[ 8] Cockburn А. Sumiving Object- Oriented Projects: А Manager's Guide, Addison-Wesley, 1998 .
[9] Evans Е., Fowler М. "Specifications." Труды конференции PLoP-97, 1997 .
[ 1 0] Fayad M., ]ohnson R. Domain -Speci/ic Application Frameworks, Wiley, 2000 .
[ 1 1 ] Fowler М. Analysis Pattems: Reusable Object Models, Addison-Wesley, 1 997 .
[ 1 2] Fowler М. Re/actoring: ImprolJing the Design о/ Existing Code, Addison-Wesley, 1999 .
[ 1 3] Fowler М. Pattems о/ Enterprise Application Architecture, Addison-Wesley, 2003 .
[ 1 4] Саmmа Е., Helm R., ]ohnson R., Vlissides ]. Design Pattems, Addison-Wesley, 1 995 .
[ 1 5] Kerievsky ]. Continuous Leaming. Extreme Programming Perspectives, Michele Marchesi et al. Addison-Wesley, 2003 .
[ 1 6] Kerievsky ]. 2003. http : / / www. indus t r i a l l ogi c. comjxp / re f act oring .
[ 1 7 ] Larman С. Applying UML and Pattems: Аn Introduction to Object- Oriented Analysis an d Design, Prentice НаН PTR, 1 998 .
[ 1 8] Merriam-Webster. Метаm- Webster's Collegiate Diction ary. Tenth edition. Merriam Webster, 1993 .
[ 1 9 ] Меуег В. Object-orien ted So/tware Constmction. Prentice НаН PTR, 1 988 .
[20] Murray-Rust Р., Rzepa Н., Leach С. Abstract 40. Стенд на 2 1 0th ACS Meeting, Chicago, 2 1 августа 1 995 г. http : / /www. ch. i c. а с. uk/ cml / [2 1 ] Pinker S. Тhe Language Instinct: How the Mind Creates Language, HarperCoHins, 1994 .
[22] Succi С. ]., WeHs О., Marchesi М., WiHiams L. Extreme Programming Perspectives, Pearson Education, 2002 .
[23] Warmer ]., Kleppe А. The Object Constraint Language: Precise Modeling with UML, Addison-Wesley, 1 999 .
[24] Wirfs-Brock R., Wilkerson В., Wiener L. Designing Object- Oriented So/tware, Prentice НаН PTR, 1 990 .
[25] Wirfs-Brock R., МсКеап А. Object Design : Roles, Responsibilities, and Collaborations, Addison-Wesley, 2003 .
ФОТОГРАФИИ Все фотоrpафии, приведенные в этой книге, бьmи опубликованы с разрешения владельцев .
Richard А. Paselk, Humboldt State University "Астролябия" (глава 3, с. 62) .
© БезвозмездноjСоrЬis " Отпечаток пальца" (глава S, с. 95), "Автосервис" (глава S, с. 1 07), "Автозавод" (глава 6, с. 1 33), "Библиотекарь" (глава 6, с. 1 4 1 ) .
Martine Jousset "Виноград" (глава 6, с. 1 24 ), " Оливковые деревья" (молодые и старые) (заключение, с. 423-424) .
Biophoto AssociatesjPhoto Researchers, Inc .
Электронная микрофотография бактерий Oscillatoria (глава 14, с. 298) .
Ross J. Venables " Гребцы" (группа и одиночка) (глава 1 4, с. 302 и 325 ) .
Photodisc GreenjGetty Images "Бегуны" (глава 1 4, с. 3 1 3), "Ребенок" (глава 1 4, с. 3 1 9 ) .
U.S. National Oceanic and Atmospheric Administration Великая Китайская стена (глава 14, с. 320) .
© 2003 NAMES Project Foundation, Atlanta, Georgia. Фотограф Paul Margolies .
www. a idsqui l t. org Мозаика памяти жертв СПИДа (глава 16, с. 375 )
ПРЕДМЕТНЫЙ УКАЗАТЕ Л Ь
П РЕДМ ЕТН Ы Й УКА З АТЕЛ Ь 443 Мировое сообщество программистов признает, что моделирование предметных областей - Iлючевой раздел прое lтировани программного обеспечени. В мо делх предметных областей разраБОТЧИIИ выражают сложные фУНIЦИИ своих про грамм, реализу их затем в таlОМ виде, IОТОРЫЙ отвечает реальным потребностм пользователей. Но HeC MOTp на очевидную важность предмета, существует очень мало пособий по эффеlТИВНОМУ внедрению моделировани предметных областей в праlТИIУ разраБОТIИ программ .
Книга ЭРИlа Эванса восполнет этот пробел. Она посвщена не отдельным техноло гим, а систематичеСIОМУ предметно-ориентированному подходу. В ней представлен ШИРОIИЙ набор приемов и меТОДИl, основанных на праlтичеСIОМ опыте, и фунда ме нтальных принципов, помогающих в реализации программных проеlТОВ из сложных предметных областей. Органично переплета праlТИIУ проеlтировани и реализации программ, эта Iнига содержит множество фаlтичеСIИХ примеров, иллюстрирующих применение общих стратегичеСIИХ принципов в реальных программных проеlтах .
ИЗ IНИГИ читатель узнает, Iаl с помощью модели предметной области придать разработ Iе сложной системы нужную направленность и динаМИIУ. Выделены основные приемы и образцы-шаблоны, образующие общий ЗЫI группы разраБОТЧИIОВ. Особо подчеРIИ c необходимость рефаlторинга не толыо,ода, но и модели в его основе, что в сочетани с итерационной agile-меТОДИIОЙ при водит 1 углублению знаний о предметной области и повышению Iачества взаимодействи между специалистами и программистами. Подход IНИГИ строитс именно на этом фундаменте, предлага модели и архитеlТУРЫ ДЛ систем и организаций любой сложности .
В частности, в Iниге рассматриваютс следующие темы:
• Единый ЗЫI общени дл всей группы разраБОТЧИIОВ
•ГлуБОlа свзь между моделью и программной реализацией
• Выделение Iлючевых черт модели
• Управление ЦИIЛОМ существовани объеlТОВ
• Написание леГIО интегрируемого,ода предметной области
• Iаl сделать сложный IОД очевидны м и преДСlазуемым
• ФОРМУЛИРОВlа введени в предметную область
• Аистимци дpa предметной области
• ПОИСI HeBHЫX понтий, СIРЫТЫХ в модели
• Применение аналитичеС IИХ шаблонов
• Архитеlтурные шаблоны в моделх
• Помержание целостности больших систем
• Сосуществование неСIОЛЫИХ моделей в одном проеlте
• Организаци систем в соответствии с Iрупномасштабными СТРУIтурами
• Качественные СIаЧIИ в моделх Име под РУIОЙ эту IНИгу. разраБОТЧИIИ объеlтно-ориентированных программ, системные анаЛИТИIИ и архитеlТОРЫ будут всегда располагать набором реlомендаций по организации своего труда, созданию сложных и полезных моделей предметных областей, превращению их в ВЫСОIОlачественные программные ПРОДУIТЫ .
Эрик Эванс влетс основателем Domain Language - Iонсалтинговой группы, IOTopa по могает различным фирмам строить и разви вать программные системы, тес но свзанные с профессиональной детельностью. Автор работал в Iачестве архитеlтора и программ над большими объеlтно-ориентированными системами н()чина с 1 980-х годов. Он таlже занимаетс повышением lваЛИфИlации групп разраБОТЧИIОВ в области ЭIстремального