Я бы сказал, что вы оба упускаете лодку и в то же время на правильном пути ... позвольте мне объяснить.
DDD - это лучший способ, который мы знаем как отрасль, чтобы кодировать реальность бизнес-задачи в область решений, которую мы можем сопоставить с компьютерной программой. DDD - это методология абстрагирования реального домена во что-то более управляемое и актуальное для нас, это хорошие вещи.
Проблема, с которой вы сталкиваетесь, заключается в реализации, преобладающим выбором реализации за последние 20-30 лет была объектная ориентация (OO), основным механизмом передачи объектов в OO является передача ссылок на объекты в такое же пространство памяти, как и вы. Таким образом, проблемы, с которыми вы сталкиваетесь в отношении крупных графиков объектов, где никогда не возникает реальной проблемы.
Ввести служебную ориентацию (SO), которая переворачивает вещи, вы больше не передаете ссылки на объекты, а обмениваете сообщения между службами. Теперь размер сообщения становится проблемой.
Если мы согласны с тем, что парадигма реализации изменилась, мы должны признать, что некоторые из наших лучших практик/шаблонов OO больше не применяются или нуждаются в пересмотре.
Если вы хотите проникнуть в SO-образ мыслей, вам нужно, я верю (мое мнение здесь), отвлечься от идеи богатого домена. Я назвал эту новую концепцию Service-Orientated-Domain (SO-Domain).
В SO-Domain состояние домена и поведение домена разделяются между передаваемыми вами сообщениями и услугами, которые вы используете.
Таким образом, состояние или атрибуты учителя являются частью TeacherDTO, но поведение является частью службы учителя.
В терминах OO это анемичный домен, но в смысле SO это не так уж плохо, так как это дает вам невероятную гибкость, поскольку у вас больше нет одной большой вещи, состояние может использоваться в нескольких контекстах ,
У вас все еще есть действующий домен, он просто разделен по-разному, сообщения хранятся в состоянии состояния и обслуживания.
Остальное относится к дизайну интерфейса службы, поэтому, чтобы получить класс для учителя, у вас могут быть такие вещи, как List RetrieveTeacherClasses (teacherIdentifier). Чтобы добавить ученика AddStudentToClass (Student, classId).
Существует миллион различных способов сделать это, вы найдете тот, который работает на вас, но, как правило, вы должны следовать парадигме, ориентированной на состояние, это означает, что сообщение отправит любое состояние, которое служба должна быть это означает, что служба не имеет апатрида, а служба без учета состояния означает масштабируемость.
Pratik упоминает, что производительность, истинные приросты производительности в масштабе всей системы не создаются, суетившись по размеру графиков объектов, а как способность каждой службы в решении масштабироваться независимо.
Вот некоторые ссылки на более на этих идеях
Building a SOA
SOA Design Pattern
Achieving integrity in a SOA
Why your SOA should be like a VW Beetle
SOA explained for your boss
WCF Service Performance
ли на самом деле не решить вопрос о том, являются ли DDD и SOA ортогональными друг другу. – 2010-12-16 01:07:57