我该如何从视图本身的实现中分离如何(或什至)如何查看域模型。作为示例,请考虑以下代码:
public class Student
{
private Set<Course> enrollment;
public void enroll(Course c){
// domain implementation
}
public void unenroll(Course c) {
// domain implementation
}
}
这是一个非常简单的示例,但对于我要问的内容来说也很好。确保该对象的视图与实际域功能脱钩的好方法是什么?例如,该学生应该能够用XML,JSON甚至某种游戏来表示,或者不具有任何视图。
我想到的某些方法可能类似于:
@XmlRootElement(name="student")
public class StudentXmlView implements XmlView<Student> {
@XmlElement(name="enrollment")
private XmlVeiw<Set<Course>> enrollmentView;
}
这种方法是否合适?或者是否存在Java中通常使用的一些最佳实践来将域从视图中分离出来?
答案 0 :(得分:2)
CQRS体系结构非常适合这种分离:它将写入模型(DDD中的聚合)与读取模型分开。
写模型是专门设计用来保护有关状态更改的业务不变性的。它执行命令。无法查询。
读取模型旨在快速且适合于特定用例。每个用例都有其他读取模型。在这里,您可以使用最适合的任何技术。
写入和读取模型之间没有平等性。您可以有3种写入模型和1种读取模型,或任意组合。
在微服务架构中,每个模型(写入或读取)都可以是微服务。
CQRS之后的第二件事是事件来源。