如何在Java中将域视图与域模型本身分开?

时间:2018-09-27 15:03:12

标签: java domain-driven-design

我该如何从视图本身的实现中分离如何(或什至)如何查看域模型。作为示例,请考虑以下代码:

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中通常使用的一些最佳实践来将域从视图中分离出来?

1 个答案:

答案 0 :(得分:2)

CQRS体系结构非常适合这种分离:它将写入模型(DDD中的聚合)与读取模型分开。

写模型是专门设计用来保护有关状态更改的业务不变性的。它执行命令。无法查询。

读取模型旨在快速且适合于特定用例。每个用例都有其他读取模型。在这里,您可以使用最适合的任何技术。

写入和读取模型之间没有平等性。您可以有3种写入模型和1种读取模型,或任意组合。

在微服务架构中,每个模型(写入或读取)都可以是微服务。

CQRS之后的第二件事是事件来源。