Это сложный вопрос, я попробую.+1 за вопрос.
Доменные модели должны знать, как взаимодействовать с внутренней работой друг друга, если они делают это в реальном мире, я думаю.Это, конечно, сильно зависит от вашей конкретной модели предметной области, потому что разные модели одной и той же вещи могут привести к совершенно разным представлениям.
Проблема с интерфейсами для каждого класса модели предметной области заключается в том, что сама модель предметной областиэто уже конкретный взгляд на реальность, как и интерфейсы.Интерфейс действителен только в этом конкретном домене.Вы не можете использовать один и тот же ICar
для планирования перевозок, калькуляторов доходов домохозяйств и оптимизации аэродинамики автомобилей.
Поэтому я сомневаюсь, что очень полезно выделять их зависимости слишком далеко.
Из того, что я знаю, интерфейсы в основном (всегда?) Общедоступны, что вызывает проблемы с доступом.Интерфейс не должен раскрывать подробности о реализации, но классы модели предметной области содержат фактическую реализацию.Таким образом, вместо «просто доступа к некоторому значению» вам придется создать еще один механизм абстракции для каждой детали.Вы не можете, например, получить доступ к любому идентификатору, пользователю и т. Д. В системе.Вам понадобится абстрактный тип идентификатора, поставщик идентификаторов и т. Д. Я считаю, что это может быть чрезвычайно громоздким в большой реальной модели.
Конечно, некоторые «границы естественных доменов» все же должны быть изолированы.Если вы создаете текстовый редактор социальных сетей, все классы доменов, которые также встречаются в традиционном текстовом редакторе, должны быть полностью изолированы от элементов, связанных с социальными сетями.Таким образом, текстовый редактор должен знать только IUser
.Но, думаю, я не скажу вам ничего нового ...
Боюсь, это не слишком удовлетворительно, но, похоже, по сути это тонкая линия.