Изоляция вашего домена - это, конечно, то, что вам нужно. Это означает, что ваш домен содержит все соответствующие инварианты и, как вы уже сделали, перечисления и тому подобное, что вам нужно для того, чтобы сделать вашу модель домена выразительной.
Иногда «внешний» мир может потребовать дублирование , чтобы сделать вещи проще и удобнее. Например, тот факт, что ваш домен проверяет, что адрес электронной почты имеет правильный формат, не означает, что ваш веб-интерфейс не также выполняет эту проверку. Вы могли бы до go такой проверки электронной почты на внешнем интерфейсе, но это в конечном итоге приведет к тому, что у пользователей будет довольно плохое впечатление. Для удобства мы «продублируем» проверку на внешнем интерфейсе.
То же самое касается некоторых данных. Общий подход c для плоских классификационных структур может выглядеть примерно так: ReferenceType
1- * ReferenceItem
, где ReferenceType.Name
- это что-то вроде MediaType
, а ReferenceItem.Name
- любые нужные вам значения. Иногда у вас могут быть Code
и IsSystemType
для ваших ссылочных позиций, но это общая идея. Каждый ссылочный тип будет иметь один или несколько ссылочных элементов, поэтому довольно простое отношение один-ко-многим может быть легко сохранено в некотором хранилище данных. Затем вы можете представить значения своему внешнему интерфейсу с помощью механизма запросов, а в слое интеграции / проблеме (веб-контроллере / обработчике сообщений) вы можете взять имя соответствующего элемента (или код) и сопоставить его, скажем, с вашим перечислением.