Кто-либо использует методы от Доменного Управляемого Дизайна? Я недавно прочитал книгу Eric Evans того же имени (хорошо, большая часть из него!) и был бы интересно получать известие от любого, кто реализовал весь/некоторый его в проекте (особенно в C#/C ++)
Я сохранил этот вопрос открытым законченный, поскольку я хотел бы видеть как можно больше комментариев, но у меня есть несколько вопросов в особенности:
1 - Типы значения должны быть реальными 'типами значения', если язык поддерживает его? например, структура в C#
2-там любая функция в C#, который делает более ясным ассоциация между языком и моделью (например, это - объект, это - агрегат и т.д.),
Да! Я использую DDD в своих проектах (но я предвзято !)
Помните, что Domain Driven Design предоставляет руководящие принципы , а не строгие ответы. Только после экспериментов вы поймете, какие аспекты работают для вашего конкретного проекта.
К вашим вопросам:
1 - Вы можете использовать структуры, но могут быть технические ограничения , которые не позволяют вам их использовать. Например, у вас могут быть сущности, которые ссылаются на тысячи объектов значений, которые имеют одинаковые значения. В этом случае было бы лучше использовать объект flyweight , чтобы уменьшить использование памяти .
2 - Я бы предложил использовать интерфейсы (например, IEntity , IValueObject , IAggregateRoot , ISpecification ). . Generics и LINQ могут помочь в решении технических проблем, но они менее полезны с точки зрения дизайна .
Я создал [бесплатную библиотеку .NET] [2], специально ориентированную на DDD, в которой можно найти идеи / вдохновение. [Подробнее об этом здесь.] [3] (проект мертв)
Мне искренне интересно: Какие аспекты DDD, по вашему мнению, принесут вам пользу? Аспекты «управляемости доменом» или аспекты реализации?
1: зависит. Типы значений в C# предназначены для атомарных пимитивов (int, byte и т.д.). Если у вас есть что-то подобное - это имеет смысл. Если ваш тип значения больше, то нет.
2: Нет. В общем, это не особенность языка.
В качестве следующего чтения я предлагаю: Scott Ambler's "Building Object Applications That Work".
1 - Должны ли типы значений быть реальными «типами значений», если язык поддерживает это?
Я думаю, что ответ на этот вопрос будет зависеть от использования и других факторов в вашем приложении, но шаблон, который вы, вероятно, ищете, таков: «Объект передачи данных», у которого есть свойства, геттеры и сеттеры, но ничего больше. Это может быть структура или объект, и объекты, вероятно, упростят управление памятью, особенно в отношении упаковки.
2- Есть ли в C # какая-либо функция, которая делает более ясной связь между языком и моделью (например, это сущность, это агрегат и т. Д.)
Я бы пошел с соглашениями об именах, например, «CustomerEntity», «OrderAggregate» и т. Д.
Хороший вопрос; Я с нетерпением жду ответов.