最近在做一个项目。采用J2EE作为开发平台,通过领域驱动开发(DDD)的方式进行开发。
?
首先说一下系统总体架构。系统分为表现层,业务层(业务层分为应用层和领域层),持久层,
其中表现层用Struts MVC框架,业务层用Spring框架,持久层用hibernate框架,现在主
要总结一下业务层和持久层。
?
业务层:根据DDD,业务层应该分为应用层和领域层,其中应用层的无状态的服务通过
Spring?IOC容器进行装配和管理。核心业务逻辑放到领域层,而应用层只是一个很薄的层,
指挥领域层的模型对象完成业务操作。领域模型根据DDD分为了实体,值对象,和服务,其
中实体是系统中一些需要记录和跟踪的对象,比如Account对象等,值对象则是一些对实体
的描述,以及实体的状态等,比如项目的站内信中,可以将消息的状态做为抽象消息的值对
象。为了提高实体的内聚性,将一些不是实体的职责分配给领域层服务对象。当然DDD中还
有关于聚合,工厂,仓库,个人理解工厂主要是用来创建对象的,工厂控制了对象生命周期
的开始,而对象的生命周期不可能只有开始这么简单,所以仓库就发挥了作用,仓库就是用
来管理对象的中间状态的。仓库可以通过缓存来管理对象,提高系统的性能。至于事务处理,
因为项目不需要分布式,所以直接采用JDBC事务,具体就是通过Spring管理的hibernate
事务来实现,将事务边界界定在应用层服务的开始和结束,这样也充分发挥Spring的声明式
事务管理功能。
?
持久层采用hibernate框架来完成。首先定义一个支持CRUD操作的泛型DAO,然后利用
Spring支持回调模板类(HibernateTemplate)来实现最基础的CRUD操作,其它的Dao接
口继承泛型接口。这样CRUD操作在统一的基类中完成,并且还可以利用泛型带来的安全性
检查。
????
最后先请教一下各位兄弟,我对于应用层服务和领域层服务的划
分不是很清楚,请问一下各位具体的划分标准是什么?各位在项
目中怎么做的?我现在是把应用层服务当做Facade来用,用来
封装业务逻辑,各位兄弟还有什么好的方法吗?请指教一下,谢了。
领域对象和pojo在概念上有什么差异呢?为啥数据访问层不能引用领域对象不呢?
根据ddd,那什么是ddd呢? 领域对象和pojo在概念上有什么差异呢?为啥数据访问层不能引用领域对象不呢?
我说说我的理解。在DDD里(Domain driven design), 领域对象分为三种,实体,值对象,服务(领域层服务).当设计到领域对象的生命周期时,就要考虑聚合,工厂和仓库了,用这三者来进行领域对象的生命周期管理。
在DDD里,没有数据访问层的概念,数据访问层已经被repository(仓库)所取代了。从仓库中得到的就是有血有肉的领域对象,不是数据库表记录。所以仓库其实就是将领域层与数据库屏蔽了,我们的领域层根本看不到数据库的存在。我觉得如果用ORM框架的话,仓库可以替代DAO,如果用hibernate,那么还可以用二级缓存对领域对象进行缓存,这些都是领域层所看不到,领域层用什么对象,要么用工厂创建,要么就去仓库中取。
这是我的理解。欢迎大家多发表一下自己的看法。理解不对的地方,还请各位弟兄指点。
的描述,以及实体的状态等
请问LZ,你这样是怎么做到Hibernate的映射的?
在我看来
Account类
class Account { String name; String password; AccountState accountState;}class AccountState { boolean authority;}
你的是大体是这样子做的吗?但我不知道怎么去去hibernate的映射.
主要是accountstate的映射处理
引用
比如Account对象等,值对象则是一些对实体 的描述,以及实体的状态等 请问LZ,你这样是怎么做到Hibernate的映射的? 在我看来 Account类
Java代码
class Account {
String name;
String password;
AccountState accountState;
}
class AccountState {
boolean authority;
} class Account {
String name;
String password;
AccountState accountState;
}
class AccountState {
boolean authority;
}
你的是大体是这样子做的吗?但我不知道怎么去去hibernate的映射. 主要是accountstate的映射处理
[email protected]@Embedded来进行映射。
领域驱动模型,听起来很像一回事,看了一下,唉,怎么也就只是那么回事呢?
呵呵,DDD是给我提出了一个新的分析和设计的方法。
哥们 总结写的不够详细
呵呵,只是写写大体上的理解。目前对于DDD一些非常细节性的东西理解也不是很彻底,也是边摸索,边实践,边学习。希望兄弟姐妹们,多发表自己对DDD的理解和认识。交流了才有进步。