HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <blockquote><p>Предметно-ориентированное проектирование (Domain-driven design) - это набор принципов и схем, направленных на создание оптимальных систем объектов. Сводится к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит бизнес-логика, устанавливающая связь между реальными условиями области применения продукта и кодом.</p>
1 <blockquote><p>Предметно-ориентированное проектирование (Domain-driven design) - это набор принципов и схем, направленных на создание оптимальных систем объектов. Сводится к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит бизнес-логика, устанавливающая связь между реальными условиями области применения продукта и кодом.</p>
2 </blockquote><p>Данный термин был впервые введён Э. Эвансом в его книге с таким же названием "Domain-Driven Design".</p>
2 </blockquote><p>Данный термин был впервые введён Э. Эвансом в его книге с таким же названием "Domain-Driven Design".</p>
3 <p>Представьте себе, что перед вами поставили задачу разработать биллинг (система тарификации, выставление счетов, обработка платежей) для интернет-провайдера. С чего вы начнёте проектирование такой системы? А начать надо с анализа предметной области. Познакомиться с основными сущностями системы и их взаимоотношениями, другими словами, вам будет необходимо разобраться в онтологии предметной области.</p>
3 <p>Представьте себе, что перед вами поставили задачу разработать биллинг (система тарификации, выставление счетов, обработка платежей) для интернет-провайдера. С чего вы начнёте проектирование такой системы? А начать надо с анализа предметной области. Познакомиться с основными сущностями системы и их взаимоотношениями, другими словами, вам будет необходимо разобраться в онтологии предметной области.</p>
4 <p>И вот тут на сцену выходит DDD. Центральная идея этого подхода заключается в том, что разработчики постоянно активно сотрудничают с экспертами предметной области (со стороны заказчика) и вместе с ними формируют так называемый единый язык. Этот язык будет использоваться для общения между всеми членами команды, а позже отразится в исходном коде разрабатываемой программы.</p>
4 <p>И вот тут на сцену выходит DDD. Центральная идея этого подхода заключается в том, что разработчики постоянно активно сотрудничают с экспертами предметной области (со стороны заказчика) и вместе с ними формируют так называемый единый язык. Этот язык будет использоваться для общения между всеми членами команды, а позже отразится в исходном коде разрабатываемой программы.</p>
5 <p>Ubiquitous Language - это не бизнес-жаргон, навязанный разработчикам, а настоящий язык, созданный целостной командой - экспертами в предметной области, разработчиками, бизнес-аналитиками и всеми, кто вовлечён в создание системы. Роль в команде не столь существенна, поскольку каждый член команды использует для описания проекта единый язык. Процесс создания единого языка более творческий, чем формальный, так как он, как и любой другой естественный язык, постоянно развивается, а те артефакты, которые вначале способствовали разработке полезного единого языка, со временем устаревают. В итоге остаются только самые устойчивые и проверенные элементы.</p>
5 <p>Ubiquitous Language - это не бизнес-жаргон, навязанный разработчикам, а настоящий язык, созданный целостной командой - экспертами в предметной области, разработчиками, бизнес-аналитиками и всеми, кто вовлечён в создание системы. Роль в команде не столь существенна, поскольку каждый член команды использует для описания проекта единый язык. Процесс создания единого языка более творческий, чем формальный, так как он, как и любой другой естественный язык, постоянно развивается, а те артефакты, которые вначале способствовали разработке полезного единого языка, со временем устаревают. В итоге остаются только самые устойчивые и проверенные элементы.</p>
6 <p>Наиболее важное для разработчика - это умение слушать экспертов, получать максимальное количество полезных знаний о предметной области. В то же время эксперты также должны прислушиваться к разработчикам и их пожеланиям. Команда учится и растёт вместе, если она действует сплочённо, получая более глубокое понимание бизнеса.</p>
6 <p>Наиболее важное для разработчика - это умение слушать экспертов, получать максимальное количество полезных знаний о предметной области. В то же время эксперты также должны прислушиваться к разработчикам и их пожеланиям. Команда учится и растёт вместе, если она действует сплочённо, получая более глубокое понимание бизнеса.</p>
7 <h2>Bounded context</h2>
7 <h2>Bounded context</h2>
8 <p>Это второе по значимости свойство DDD после единого языка. Оба эти понятия взаимосвязаны и не могут существовать друг без друга.</p>
8 <p>Это второе по значимости свойство DDD после единого языка. Оба эти понятия взаимосвязаны и не могут существовать друг без друга.</p>
9 <p>Итак, ограниченный контекст - это явная граница, внутри которой существует модель предметной области, которая отображает единый язык в модель программного обеспечения.</p>
9 <p>Итак, ограниченный контекст - это явная граница, внутри которой существует модель предметной области, которая отображает единый язык в модель программного обеспечения.</p>
10 <p>В каждом ограниченном контексте существует только один единый язык.</p>
10 <p>В каждом ограниченном контексте существует только один единый язык.</p>
11 <ul><li>Ограниченные контексты являются относительно небольшими.</li>
11 <ul><li>Ограниченные контексты являются относительно небольшими.</li>
12 <li>Ограниченный контекст достаточно велик только для единого языка изолированной предметной области, но не больше.</li>
12 <li>Ограниченный контекст достаточно велик только для единого языка изолированной предметной области, но не больше.</li>
13 <li>Единый значит "вездесущий" или "повсеместный", т. е. язык, на котором говорят члены команды и на котором выражается отдельная модель предметной области, которую разрабатывает команда.</li>
13 <li>Единый значит "вездесущий" или "повсеместный", т. е. язык, на котором говорят члены команды и на котором выражается отдельная модель предметной области, которую разрабатывает команда.</li>
14 <li>Язык является единым только в рамках команды, работающей над проектом в едином ограниченном контексте.</li>
14 <li>Язык является единым только в рамках команды, работающей над проектом в едином ограниченном контексте.</li>
15 <li>Попытка применить единый язык в рамках всего предприятия или что хуже, среди нескольких предприятий, закончится провалом.</li>
15 <li>Попытка применить единый язык в рамках всего предприятия или что хуже, среди нескольких предприятий, закончится провалом.</li>
16 </ul><p>Например, система биллинга крупной телекоммуникационной компании может иметь следующие ключевые элементы (контексты):</p>
16 </ul><p>Например, система биллинга крупной телекоммуникационной компании может иметь следующие ключевые элементы (контексты):</p>
17 <ul><li>Клиентское обслуживание</li>
17 <ul><li>Клиентское обслуживание</li>
18 <li>Система безопасности и защиты</li>
18 <li>Система безопасности и защиты</li>
19 <li>Резервное копирование</li>
19 <li>Резервное копирование</li>
20 <li>Взаимодействие с платёжными системами</li>
20 <li>Взаимодействие с платёжными системами</li>
21 <li>Ведение отчётности</li>
21 <li>Ведение отчётности</li>
22 <li>Система уведомлений</li>
22 <li>Система уведомлений</li>
23 - </ul><p>В этом уроке были представлены самые базовые понятия и идеи предметно-ориентированного проектирования. За более подробным описанием можно обратиться к<a>отличной статье</a>на Хабре, либо к книге Эрика Эванса. Также не могу не порекомендовать<a>моё выступление</a>на одной из региональных конференций, в коором я рассказываю о похожих идеях, помогающих улучшить качество кода, который мы пишем.</p>
23 + </ul><p>В этом уроке были представлены самые базовые понятия и идеи предметно-ориентированного проектирования. За более подробным описанием можно обратиться к<a>отличной статье</a>на Хабре, либо к книге Эрика Эванса. Также не могу не порекомендовать<a>моё выступление</a>на одной из региональных конференций, в котором я рассказываю о похожих идеях, помогающих улучшить качество кода, который мы пишем.</p>