С чего начать при выполнении модели предметной области? - PullRequest
4 голосов
/ 10 июня 2010

Допустим, я составил список концепций, которые буду использовать для рисования моей доменной модели. Кроме того, у меня есть пара вариантов использования, из которых я сделал пару диаграмм последовательности системы.

При рисовании модели предметной области я никогда не знаю, с чего начать:

  1. Проектирую модель так, как я считаю системой. То есть, если я моделирую человеческое тело, я начинаю с добавления классовых понятий сердца, мозга, кишечника, желудка, глаз, головы и т. Д.
  2. Начните с разработки того, что нужно сделать в сценариях использования. Это если у меня есть сценарий использования, который заставляет человеческое тело проглотить что-то, я сначала нарисую классные концепции для рта, горла, стоматита, кишечника и т. Д.

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

Спасибо

Ответы [ 6 ]

4 голосов
/ 13 июня 2010

Независимо от того, DDD или нет, я бы порекомендовал при определении вездесущего языка (UL) путем опроса владельца (ов) продукта.Установление связи таким образом, что вы и владельцы продукта, говорящие на одном языке, не только помогают в общении, но и могут обсуждать проект в общих чертах, что помогает модели домена определить себя.

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

3 голосов
/ 13 июня 2010

Я бы начал с рисования диаграммы классов со всеми связями и реализовывал только те классы, которые необходимы в соответствии с требованиями вашего приложения.

Вы можете использовать анемичный подход (атрибуты плюс геттеры и сеттеры), чтобы упростить задачу и избежать одного шага написания бизнес-логики. В случае анемичной модели логика перейдет в соответствующий класс Service. Таким образом, вы можете рассмотреть варианты использования позже.

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

Ответ на вопрос пожираемого Элизиума ниже :

С точки зрения анализа, начиная с вариантов использования (что), а затем переходя к диаграмме классов (как), звучит как хорошее практическое правило. Лично я бы потом сделал диаграмму последовательности (когда и кого?), Так как вам нужно было бы знать, между какими процессами / объектами нужно отправлять сообщения.

Кроме того, я считаю, что UML - это просто способ моделирования системы / проекта, а не сама методология (в отличие от Merise, RAD, RUP, Scrum и т. Д.). Нет ничего, что могло бы помешать кому-то начать с любой диаграммы, если у него есть достаточно информации для ее завершения. Фактически, они должны выполняться одновременно, поскольку каждая из диаграмм - это разные перспективы одной и той же системы / проекта.

Итак, в целом все зависит от того, как вы будете проводить анализ. Во время обучения меня учили жесткому водопадному подходу, когда вы выполняете полный анализ от начала до конца, прежде чем создавать некоторый код. Однако на практике все может быть по-другому, поскольку императивом может быть создание рабочего приложения в кратчайшие сроки.

Например, недавно я познакомился с методологией Scrum для упражнения, включающего создание веб-сайта, где люди могут публиковать свои вымыслы. Поскольку были временные ограничения и четкое видение того, что должно быть достигнуто, мы сразу начали с простой диаграммы классов, представляющей модель домена . Варианты использования были затем выведены из серии макетов экранов, которые мы создали.

По памяти классами были История, Глава, Пользователь и Категория. Этот последний класс был свернут в пользу более гибкого класса Tag. Как вы могли догадаться, полная диаграмма классов существующего проекта была бы намного более сложной из-за применения доменного дизайна и особенностей языка программирования Java.

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

Конечно, когда вы представляете проект клиенту, предпочтительнее будет провести полный анализ с использованием диаграмм UML и некоторых макетов, чтобы они имели представление о том, что вы предлагаете. Вот тут-то и появляется UML. Как только вы объясните некоторые визуальные условные обозначения, человек должен понимать диаграммы.

В заключение, если вы находитесь в ситуации, когда вы пытаетесь определить, чего хочет клиент, вероятно, будет хорошей идеей постепенно составить анкету, которую вы сможете взять с собой. Собеседование с человеком - единственный способ определить, какие концепции / функции действительно необходимы для приложения, и вам следует ожидать возврата к нему для выяснения определенных аспектов. Еще один совет - провести небольшое исследование в Интернете, когда вы столкнетесь с темой, с которой вы не знакомы.

В вашем примере это было бы пройти через основы анатомии. Среди прочего, это поможет вам решить, что должна содержать модель и какую гранулярность она должна иметь (Какую группу органов следует учитывать? Насколько точной она должна быть? Нужно ли моделировать только органы или они должны быть разложены на их составляющие, такие как ткани, клетки, химический состав и т. д.?).

2 голосов
/ 10 июня 2010

Я думаю, что начинать можно с того, что кажется логичным и удобным.Вероятно, лучше начать с вариантов использования, так как они дают вам четкое направление и цели и помогают избежать ситуаций YAGNI.Учитывая, что вы должны пытаться разработать сильную модель домена, это не должно иметь большого значения, так как важна вся картина домена.

0 голосов
/ 16 декабря 2011

Краткий ответ

Выберите вариант использования, нарисуйте некоторую диаграмму сотрудничества (и диаграмму классов), чтобы реализовать вовлеченные объекты домена.Сконцентрируйтесь только на тех объектах, которые участвовали, чтобы достичь цели варианта использования.Напишите тестовый пример TDD, чтобы установить ожидание и постепенно смоделируйте классы своего домена, чтобы соответствовать ожиданиям. TDD очень помогает понять ожидаемое поведение и помогает получить более чистую модель домена.Вы увидите, что ваш домен будет постепенно развиваться вместе с ожиданиями TDD.

Длинный ответ

Мой личный опыт работы с DDD был непростым.Это было потому, что у нас не было необходимых основ во-первых.У нашей команды было много слабых мест в разных областях;требования не были отражены должным образом, и у нас был только представитель клиента, который не был действительно полезен (не вовлечен).У нас не было надлежащего плана выпуска, а разработчикам не хватало объектно-ориентированных концепций, лучших принципов и так далее.Главная проблема, с которой мы столкнулись, была тратить так много времени на попытки понять логику предметной области.Мы набросали много диаграмм классов, и мы так и не получили правильную модель предметной области, поэтому мы перестали это делать и выяснили, что пошло не так.Проблема заключалась в том, что мы слишком старались понять логику предметной области, и вместо того, чтобы общаться, мы сделали предположения о требованиях.Мы решили изменить наш подход, применили TDD, начали писать ожидаемое поведение и закодировали модель предметной области, чтобы соответствовать ожиданиям TDD.Иногда мы застревали при написании тестовых случаев TDD, потому что не понимали предметную область.Мы сразу же поговорили с представителем заказчика и постарались получить больше информации.Мы изменили нашу стратегию выпуска;применяем гибкую методологию и выпускаем часто, чтобы мы получили реальную обратную связь от конечного пользователя.Однако необходимо убедиться, что ожидание конечного пользователя было установлено на правильном уровне.Мы провели рефакторинг на основе отзывов, и таким образом модель предметной области развивалась постепенно.Впоследствии мы применили шаблоны проектирования для улучшения возможности повторного использования и обслуживания.Моя точка зрения заключается в том, что один DDD не может выжить, мы должны построить экосистему, охватывающую домен, разработчики должны иметь четкие концепции ООП и должны ценить TDD и модульное тестирование.Я бы сказал, что DDD стоит на вершине всех методов и практик ООП.

0 голосов
/ 11 июля 2010

Вы начинаете с бизнес-требований, которые могут быть формализованы или нет. Если формализовано, вы бы использовали диаграммы вариантов использования.

Например, вот диаграммы вариантов использования для приложения электронной коммерции: http://askuml.com/blog/e-commerce/

http://askuml.com/files/2010/07/e-commerce-use-case.jpg http://askuml.com/files/2010/07/e-commerce-use-case2b.jpg

Из этих вариантов использования вы можете естественным образом определить бизнес-объекты: продукт, категорию продукта, корзина для покупок и т. Д., То есть начать подготовку диаграмм классов.

Это лучшая практика во многих методологиях, но это также просто здравый смысл и естественность.

0 голосов
/ 14 июня 2010

Я хотел бы поделиться своим опытом для подобных ситуаций.Я обычно начинаю с написания тестов и кода.И попробуйте охватить один конец в конец варианта использования.Это дает мне достаточно четкое представление о проблеме, и в конце у меня также есть кое-что, что я могу продемонстрировать своему клиенту.В большинстве случаев последующие истории основываются на предыдущих, но мне также случается так, что последующие истории требуют изменений в предыдущей модели, которую я придумал.Но это не влияет на меня, так как у меня уже есть хорошее тестовое покрытие.Таким образом, я придумал модель, которая подходит для текущей задачи, а не модель, которая отображает реальный мир.

...