Внедрение управления доменом

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

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

1 - Если типы значений являются реальными типами значений, если язык поддерживает его? например struct в С#

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

Ответ 1

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

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

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

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

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

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

Я искренне заинтересован хотя: Какие аспекты DDD вы думаете, принесут пользу вам? Аспекты "Domain Driven" или аспекты реализации?

Ответ 2

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

2: Нет. В общем, это не языковая функция.

В следующей статье я предлагаю следующее: Скотт Амблер "Создание объектов объектов, которые работают".

Ответ 3

1 - Если типы значений являются реальными типами значений, если язык поддерживает его?

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

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

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

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

Ответ 4

1 - Если типы значений являются реальными типами значений, если язык поддерживает его? например структура в С#

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

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

При решении сущностей по отношению к значениям да. Мы обнаружили, что использование readonly в С# очень полезно для реализации объектов Value в DDD. Мы широко используем DDD в Pluralsight, и я время от времени рассказываю об этом в блоге Pluralsight. На самом деле, я запланировал две записи в блоге о readonly и DDD, чтобы выйти позже на этой неделе.

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