Реализация доменного дизайна - PullRequest
10 голосов
/ 22 марта 2010

Кто-нибудь использует методы из Domain Driven Design?Я недавно прочитал одноименную книгу Эрика Эванса (ну, в основном, ее!), И мне было бы интересно услышать от всех, кто реализовал все / некоторые из них в проекте (особенно в C # / C ++)

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

1 - Должны ли типы значений быть реальными «типами значений», еслиязык поддерживает это?например, структура в C #

2 - есть ли какая-либо особенность в C #, которая делает более ясной связь между языком и моделью (например, это объект, это агрегат и т. д.)

Ответы [ 4 ]

6 голосов
/ 24 марта 2010

Да! Я использую DDD в своих проектах (но я предвзятый !)

Помните, что Domain Driven Design предоставляет рекомендации , а не строгие ответы. Только после экспериментов вы поймете, какие аспекты работают для вашего конкретного проекта.

На ваши вопросы:

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

2 - я бы предложил использовать интерфейсы (например, IEntity , IValueObject , IAggregateRoot , ISpecification ) , Generics и LINQ могут помочь в решении технических проблем, но менее полезны с точки зрения design .

Я создал [бесплатную библиотеку .NET] [2], специально ориентированную на DDD, которая может найти идеи / вдохновение. [Подробнее об этом здесь.] [3] (проект мертв)

Мне искренне интересно: Какие аспекты DDD, на ваш взгляд, принесут вам пользу? «Управляемые доменом» аспекты или аспекты реализации?

3 голосов
/ 22 марта 2010

1: зависит. Типы значений в C # предназначены для атомарных элементов (int, byte и т. Д.). Если у вас есть что-то подобное - это имеет смысл. Если ваш тип значения больше, нет.

2: Нет. Обычно это не языковая функция.

Я предлагаю следующее чтение: Скотт Амблер "Создание приложений, которые работают".

2 голосов
/ 22 марта 2010

1 - Должны ли типы значений быть реальными «типами значений», если язык поддерживает это?

Я думаю, что ответ на этот вопрос будет зависеть от использования и других факторов в вашем приложении, но вы, вероятно, ищете шаблон «Объект передачи данных», который имеет свойства, методы получения и установки, но не более того. Это может быть структура или объект, и объекты, вероятно, упростят вопросы управления памятью, особенно в отношении бокса.

2 - Есть ли какая-либо особенность в C #, которая проясняет связь между языком и моделью (например, это сущность, это совокупность и т. Д.)

Я бы согласился с соглашениями об именах, например, «CustomerEntity», «OrderAggregate» и т. Д.

Хороший вопрос; Я с нетерпением жду ответов.

1 голос
/ 30 января 2012

1 - Должны ли типы значений быть реальными «типами значений», если язык поддерживает это? например структура в C #

Не путайте между понятием DDD «Объект значения» и понятием CLR «Тип значения» (структура в C #). Первое связано с дизайном, а второе - это реализация реализации более низкого уровня, которая на самом деле больше связана с управлением памятью, чем что-либо еще.

2 - Есть ли какая-либо особенность в C #, которая проясняет связь между языком и моделью (например, это сущность, это совокупность и т. Д.)

Когда речь идет о сущностях и ценностях, да. Мы обнаружили, что использование readonly в C # очень полезно для реализации Value Objects в DDD. Мы активно используем DDD в Pluralsight, и я время от времени пишу об этом в блоге Pluralsight. Действительно, я запланировал две записи в блоге о readonly и DDD, чтобы выйти позже на этой неделе.

[1] http://blog.pluralsight.com/tag/ddd/

...