Я бы сказал, что вы оба скучаете по лодке и в то же время находитесь на правильном пути ... позвольте мне объяснить.
DDD - лучший способ, которым мы знаем как отрасль кодификации реальности.бизнес-проблемы в область решения, которую мы можем сопоставить с компьютерной программой.DDD - это методология, превращающая реальный домен в нечто более управляемое и актуальное для нас. Это хорошие вещи.
Проблема, с которой вы сталкиваетесь, заключается в реализации, преобладающем выборе реализации за последние 20-30 лет.была объектная ориентация (ОО), основной механизм передачи объектов в ОО - это передача ссылок на объекты в том же пространстве памяти, что и вы.Таким образом, проблемы, с которыми вы сталкиваетесь в больших графах объектов, где никогда не бывает реальной проблемы.
Введите ориентацию службы (SO), которая переворачивает вещи, вы больше не передаете ссылки на объекты, а обмениваетесь сообщениями между службами.Размер сообщения теперь становится проблемой.
Если мы признаем, что парадигма реализации изменилась, мы должны признать, что некоторые из наших передовых методов / шаблонов ОО больше не применяются или нуждаются в пересмотре.
Если вы хотите войти в ТАКОЕ мышление, вам нужно, я полагаю (мое мнение здесь), немного отказаться от идеи богатого домена.Я называю эту новую концепцию сервис-ориентированным доменом (SO-домен).
В домене SO состояние домена и поведение домена разделены между сообщениями, которые вы передаете, и услугами, которые вы используете.
Таким образом, состояние или атрибуты учителяявляются частью TeacherDTO, но поведенческое является частью службы учителя.
В терминах ОО это - анемичная область, но в некотором смысле это не так уж плохо, поскольку это дает вам удивительную гибкость, поскольку у вас больше нет одной большой вещи, состояние можно использовать в нескольких контекстах.
У вас все еще есть действительный домен, он просто разделен по-разному, сообщения удерживают состояние, а службы удерживают поведение.
Остальное сводится к проектированию интерфейса службы, поэтому получить класс для учителяу вас могут быть такие вещи, как List RetrieveTeacherClasses (teacherIdentifier).Чтобы добавить студента AddStudentToClass (Student, classId).
Существует миллион способов сделать это, вы найдете тот, который работает для вас, но по общему правилу вы должны следовать парадигме, учитывающей состояние, это означает, что сообщение отправит любое состояние, в котором нуждается служба.чтобы быть в курсе, это позволяет службе быть без сохранения состояния, а служба без сохранения состояния означает масштабируемость.
Pratik упоминает производительность, истинное повышение производительности в масштабе всей системы достигается не путем смещения размера графов объектов, нокак способность каждого сервиса в решении независимо масштабироваться.
Вот несколько ссылок на дополнительные сведения об этих идеях
Создание SOA
Шаблон проектирования SOA
Достижение целостности в SOA
Почему ваша SOA должна быть похожа на VW Beetle
SOA для вашего босса
Производительность службы WCF