1 实现领域模型
领域模型经常被其它功能引用,因此,我们应该时刻注意不应该让切面逻辑侵入到领域模型的实现中去。
2 当我们的关注点,例如持久化,事物管理,权限等出现在领域模型的实现中时,这就是代码侵入(leaky concerns)。领域模型的实现不应该依赖于java api。例如领域模型中不应该用JDBC api调用数据库操作。所以实现领域模型的规则:MVC三层中都能访问领域模型实体类,并能改变其状态。
防止领域模型代码侵入可以方便单元测试,因为可以不必为其配置特定的上下文环境或者容器。
3 javaee 用元数据解决了leaky concerns,用注解或者XML配置文件,hibernate不是javaee运行时环境,他只是用来实现JPA中数据持久化的功能。JPA主要定义实体类,实现变成通明持久化。hibernate实现了自动持久化。这里的通明是指把领域模型的持久化类和持久化层的关注点(concerns)完全分离,也就是说持久化类不关注也不依赖于持久化机制。我们用自动指的是一个持久化的解决方案(注解持久化类,层次,元数据)依赖于你去处理底层操作细节(比如用JDBC API连接数据库)
注:没有一个自动的持久化解决方案是完全通明的。我们应该让持久化机制对领域模型类的实现影响最小。
4 一:JPA不要求持久化类必须继承某个特定父类或者继承某个接口。
二:你能在持久化上下文之外复用持久化类,比如在显示层访问持久化类或者单元测试。有可重用性和可测试性。
三: 持久化类不关注底层持久化技术,甚至不知道自己被持久化。
四: 在单线程业务逻辑中不一定要关注持久化类实例的状态
5 我们最长用的编程模型来实现通明和自动持久化的是POJO (Plain Old Java Objects),
6 当持久化实例被存储在 HttpSession中或者通过 RMI传送时,必须要序列化。
7 可持久化类必须是顶层类(可以继承一个不是持久化的父类,不可以是内部类),JPA和hibernate要求持久化类必须有一个无参数构造函数