Персональные инструменты
 

Необъектные модели предметной области. Опыт CUSTIS. Доклад на ADD-2011 — различия между версиями

Материал из CustisWiki

Перейти к: навигация, поиск
м
 
(переименовал «Необъектные модели предметной области. Опыт CUSTIS. Доклад на ADD-2011» в «[[Необъектные модели предметной области. Опыт CUSTIS (М...)
 
Строка 1: Строка 1:
Доклад на конференции [http://addconf.ru/ Application Developers Days 29-30.04 Питер]
+
#перенаправление [[Необъектные модели предметной области. Опыт CUSTIS (Максим Цепков, ADD-2011)]]
 
+
[http://www.slideshare.net/custisppt/custis-tsepkovadd2011 Презентация]
+
 
+
== Тезисы доклада ==
+
 
+
Самая распространенная в настоящее время методология проектирования сложных систем — '''DDD''' (Domain Driven Design) — предлагает строить архитектуру на основе модели предметной области, формируя '''единый язык''' для всех участников проекта. В качестве основного средства построения моделей используют ООП (объектно-ориентированное программирование) — в том числе, благодаря объектной парадигме основных языков реализации (C#, Java).
+
 
+
Однако объектная модель, выраженная в диаграмме классов, не всегда является хорошим единым языком. Например, потому, что в самой предметной области важны поведенческие или другие аспекты, эффективно отражаемые другими видами диаграмм.
+
 
+
В таких случаях рационально использовать необъектную модель, даже если ее реализация будет осуществляться с помощью объектных языков и сред. Сочетание необъектной модели с объектной реализацией будет показано на двух примерах.
+
 
+
Первый пример — известный шаблон State Entity, который логичнее описывать диаграммой состояний, а не диаграммой классов. Второй, более сложный пример — представление учета, которому методологи не уделили должного внимания и для которого мы придумали свой способ — диаграммы учета.
+
 
+
Для успешного использования необъектной модели необходимо типовое отображение ее примитивов проектирования в реализацию на объектных языках, которое было найдено в обоих случаях. Это делает модель языком общения заказчика и разработчика, исключая необходимость перевода на язык объектной реализации.
+
 
+
Таким образом, необъектная модель и диаграммы, в которых она находит отражение, не являются иллюстративными схемами для заказчика и пользователя, а играют роль единого языка для всех участников проекта.
+
 
+
== Краткое изложение ==
+
 
+
Domain Driven Design является mainstream-методологией проектирования сложных систем. Он предлагает строить архитектуру на основе модели предметной области, формируя '''единый язык''' для всех участников проекта — от экспертов и пользователей заказчика до разработчиков и тестеров. А в качестве основного средства построения моделей предлагается широко известный ООП. И не только в силу хорошо зарекомендовавшей себя и проработанной методологии, но и потому, что построенные модели соответствуют парадигме современных объектных языков программирования, таких как C# и Java.
+
 
+
Однако, существуют области (или фрагменты областей), в которых объектная модель, выраженная в диаграмме классов, не может выполнять роль единого языка, и потому не может являться хорошим способом проектирования. Причина может быть в том, что в самой предметной области преобладают поведенческие, а не структурные аспекты, выражаемые другими диаграммами. Или в том, что в рамках предметной области может существовать общепринятый язык для хорошего описания со своими диаграммами. Тогда их логичнее использовать, даже если реализация будет выполняться на объектных языках программирования и в объектной модели. Но бывает и так, что объектная модель не слишком подходит для решения конкретной задачи. Хорошо известным примером такой области может быть система показателей с различными разрезами, для работы с которой обычно применяют многомерные модели данных. Во всех этих случаях Эрик Эванс в классической книге по DDD рекомендует искать и использовать другие подходы.
+
 
+
Отметим, что реализация даже не объектной модели, как правило, выполняется с помощью объектных языков и сред, поскольку именно они представляются наиболее современной технологической платформой. Сочетание не-объектной модели с объектной реализацией — достаточно интересно. Оно будет рассмотрено на двух примерах.
+
 
+
Первый — для давно известного шаблона State Entity, который правильно описывать через диаграмму состояний, а вовсе не диаграмму классов. Именно диаграмма состояний будет служить тем единым языком общения. При этом техническая реализация может быть различной, например, Эванс приводит три возможных варианта. И их можно выбирать в зависимости от особенностей конкретного проекта, используя, однако, единую схему в каждом проекте.
+
 
+
Второй, более сложный пример, касается представления учета. Это профильная деятельность нашей компании, обойденная вниманием методологов. И для нее мы придумали свой способ — диаграммы учета. При этом, как и в случае State Entity, техническая реализация может быть различна.
+
 
+
Общий подход, примененный в обоих случаях, при реализации проекта состоит в выборе способа, с помощью которого примитивы проектирования отображаются в объектную реализацию. И после этого выбора соответствующие специализированные диаграммы могут служить единым языком проектирования. IT-специалисты знают способ отображения в объектную реализацию и потому им не требуется каждый раз осуществлять перевод.
+
 
+
По опыту, использование необъектных моделей проектирования при реализации на объектных языках является не слишком понятным для разработчиков. Они склонны рассматривать эти схемы как иллюстративные, для объяснения заказчику, а вовсе не как составляющие единого языка, на котором строится модель. Надеемся, что доклад поможет достичь понимания этого различия.
+
 
+
== Об авторе ==
+
 
+
Я – соучредитель и главный архитектор компании CUSTIS, в которой работает со дня основания (1996). Образование, можно сказать, классическое - закончил с отличием Факультет управления и прикладной математики Московского физико-технического института.
+
 
+
Я верю, что автоматизация - дает новые возможности развития. Поэтому создавая автоматизированные системы мы открываем путь прогрессу и делаем мир лучше. Создание архитектуры реальных систем, особенно в заказной разработке - интереснейший процесс поиск баланса между общими архитектурными подходами и реализацией специфических требований конкретного проекта. Я участвовал в разработке множества проектов и нескольких фреймворков компании.
+
 
+
Я верю в эффективность командной работы, эффективность профессиональных сообществ, и категорически не согласен рассматривать людей как ресурсы. Это современный тренд - гибкие методологии разработки. Это относится и к проектированию архитектуры, вопреки достаточно распространенному мнению о примате в этой области единоличного креативного творца - по моему опыту, лучшие архитектуры создавались совместно сильными архитекторами, хотя договариваться было и не просто. Свои взгляды я пропагандирую как в профессиональных сообществах, таких как AgileRussia, так и участвуя в развитии процессов внутри компании.
+
 
+
== Ссылки ==
+
 
+
Шаблоны:
+
* Фаулер http://martinfowler.com/eaaDev/AccountingNarrative.html
+
* State Entity http://blogs.sun.com/jkumaran/entry/state_design_pattern_using_java
+
 
+
{{replicate-from-custiswiki-to-lib}}
+

Текущая версия на 19:38, 15 мая 2011