Кто-нибудь использует методы из проекта 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/