Подтвердить что ты не робот

Является ли проект, управляемый доменом, подходящим для моего проекта?

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

Я конвертирую классическое приложение ASP в раздел .NET по разделам. Он включает в себя прочную схему категоризации продукта и корзину покупок, которая получает ~ 100-200 заказов в день, а видео раздел похож на YouTube (видео и социальные функции, такие как оценка, комментирование и т.д.). Поскольку я конвертирую его в куски, я хочу рассматривать каждую область сайта как отдельный проект.

Сайт постоянно получает новые функции и нуждается в простом обслуживании и обновлении.

Сейчас я просто использую базовый домашний ADO.NET DAL с BLL и DTO, которые действуют как общий уровень.

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

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

4b9b3361

Ответ 1

DDD не является архитектурой.

Это философия дизайна, вы не можете просто переименовать все свои FooDAO в FooRepositiories, выбросить слой Anti-Corruption и называть его DDD.

Речь идет о доменном дизайне. Он ставит акцент на модели, которые вы используете для решения проблем в вашем конкретном домене. Что предлагает Эрик Эванс, так это то, что если ваш сайт является просто формой для присоединения к списку рассылки, нет причин тратить дни перед доской, играя с моделями. Это мое мнение, если в вашем домене есть только один контекст, вам не нужен DDD. Подробнее об этом немного.

Там знаменитая цитата:

"В" Компьютерной науке "есть только две трудные проблемы: недействительность кэша и именование вещей". - Фил Карлтон

И у DDD есть шаблоны для решения этих проблем. Он предлагает ubitiquous язык в качестве шаблона для решения именования, и он предлагает часто ошибочную коллекцию шаблонов: репозиторий, агрегат, объект и объект Value для решения согласованности модели (в котором я буду использовать недействительность кэша и не буду здесь останавливаться).

Но я бы сказал, что, самое главное, он добавляет критический 3-й предмет (не выключенный 1 проблемой):

Где разместить вещи

Где поставить код и логику. Для меня самая фундаментальная концепция DDD - это контекст. Не все проблемы лучше всего обслуживаются одной и той же моделью, и знание того, где заканчивается один контекст, а другой начинается, является критическим первым шагом в DDD.

Например, в моей компании мы работаем с Джобсом, Работодателями и рекрутерами. Мир ищущего работу сильно отличается от мира рекрутера, и они оба смотрят на Работу по-разному. В качестве примера, в мире (контексте) рекрутеров они могут опубликовать работу и сказать

Я хочу, чтобы эта работа была доступна в Нью-Йорке, Остине и Сан-Франциско.

В OO говорят: у одного задания есть одно или несколько мест.

В мире ищущего работу работу в Лос-Анджелесе - это не то же самое, что работа в Бостоне. Nevermind, если они занимают одно и то же место в одной компании. Разница в физическом местоположении имеет смысл для ищущего работу. В то время как рекрутер хочет управлять всеми рабочими местами Widget Manager из одного места, даже если они распространены по всей стране, Jobseeker в Нью-Йорке не волнует, есть ли такая же позиция в Сиэтле.

Итак, вопрос? Сколько мест должно иметь Job? Один или много?

Ответ DDD - оба. Если вы находитесь в контексте jobseeker, то задание имеет только одно местоположение, и если вы рекрутер, в этом контексте задание может иметь много местоположений.

Контекст Jobseeker полностью отделен от контекста Recruiter и должен не делиться одной и той же моделью. Даже если в конце дня все задания попадают в одну и ту же БД (возможно, другой контекст), обмен моделями между контекстами может сделать модель валетом всех профессий и мастером ни одного.

Теперь этот пример очень специфичен для домена найма и поиска работы. Он не имеет ничего общего с Entity Framework ADO или MVC или ASP. DDD является агностиком.

И это DDD ересь, чтобы утверждать, что структура A или B делает вашу архитектуру DDD. Весь смысл DDD заключается в том, что модель должна удовлетворять потребности конкретного Контекста в пределах определенного Домена. Рамки могут поддерживать только это и сделать это возможным, они не могут делать:

$ dddonrails new MyDDDApplication
$ dddonrails generate context ContextA
$ dddonrails generate context ContextB
$ dddonrails generate model Widget ContextA
$ dddonrails generate model Widget ContextB
$ dddonrails start

Чтобы конкретно задать вопрос: "Для DDD? Или не для DDD?" Хорошая новость заключается в том, что вам не нужно принимать решение в начале, "Это будет проект DDD!" DDD не требует каких-либо инструментов, кроме желания серьезно подумать о проблемах, которые вы пытаетесь решить, и спросить, мой код помогает или причиняет мне боль?

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

Но отделите несколько тактические и практические проблемы того, что среда представления (MVC или нет MVC) и структура персистентности (Entity Framework?) от задачи моделирования вашего бизнес-домена. Если вы хотите начать сейчас, подумайте о том, какие контексты в вашем приложении. Некоторые вопросы:

  • Являются ли несколько областей приложения решающими разные проблемы с одними и теми же базовыми данными?
  • Сколько команд работает в приложении?
  • Как они интегрируются друг с другом?

Отображение этих данных называется Рисование контекстной карты, и это важный первый шаг к началу DDD.

Я рекомендую вам еще раз проверить сайт ddd. Там есть хорошие видео Eric Evans на qcon. Вы также можете прочитать книгу Эрика Эванса "Управление доменными именами", у него есть еще много примеров.

Ответ 2

Я бы решительно рассмотрел возможность поиска MVC и внедрения системы, как описано в примере веб-сайт NerdDinner. Если вы используете Linq to SQL или ADO.NET Entity Framework, вы получаете бесплатный домен, а также ORM. Это обеспечивает полный доступ к данным и делает запрос и фильтрацию объектов вашего домена легким.

веселит

Ответ 3

У меня был TON успеха с Theion Architecture... http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ Вы можете получить образец этой архитектуры (который использует DDD, MVC, NHibernate, Test Driven Development) из Code Camp Server.... http://codecampserver.codeplex.com/