`

项目总结(采用领域驱动开发方式)

    博客分类:
  • DDD
阅读更多

最近在做一个项目。采用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来用,用来

封装业务逻辑,各位兄弟还有什么好的方法吗?请指教一下,谢了。

11
2
分享到:
评论
10 楼 fanfree 2009-04-20  
应用层主要协调应用程序的活动。不包括任何业务逻辑,不保存业务对象的状态,但能保存应用程序任务过程的状态。
9 楼 狂放不羁 2008-10-29  
allforjava 写道

哥们  总结写的不够详细


呵呵,只是写写大体上的理解。目前对于DDD一些非常细节性的东西理解也不是很彻底,也是边摸索,边实践,边学习。希望兄弟姐妹们,多发表自己对DDD的理解和认识。交流了才有进步。
8 楼 allforjava 2008-10-29  
哥们  总结写的不够详细
7 楼 狂放不羁 2008-10-24  
ugibb510 写道

领域驱动模型,听起来很像一回事,看了一下,唉,怎么也就只是那么回事呢?

呵呵,DDD是给我提出了一个新的分析和设计的方法。
6 楼 ugibb510 2008-10-24  
领域驱动模型,听起来很像一回事,看了一下,唉,怎么也就只是那么回事呢?
5 楼 狂放不羁 2008-10-23  
east_java 写道

引用
比如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的映射处理


我一般是通过@Embeddable和@Embedded来进行映射。
4 楼 east_java 2008-10-23  
引用
比如Account对象等,值对象则是一些对实体

的描述,以及实体的状态等


请问LZ,你这样是怎么做到Hibernate的映射的?

在我看来
Account类
class Account {

   String name;
   String password;
    AccountState accountState;
}

class AccountState {
    boolean authority;
}


你的是大体是这样子做的吗?但我不知道怎么去去hibernate的映射.
主要是accountstate的映射处理
3 楼 狂放不羁 2008-10-23  
shiren1118 写道

根据ddd,那什么是ddd呢? 领域对象和pojo在概念上有什么差异呢?为啥数据访问层不能引用领域对象不呢?

我说说我的理解。在DDD里(Domain driven design), 领域对象分为三种,实体,值对象,服务(领域层服务).当设计到领域对象的生命周期时,就要考虑聚合,工厂和仓库了,用这三者来进行领域对象的生命周期管理。

在DDD里,没有数据访问层的概念,数据访问层已经被repository(仓库)所取代了。从仓库中得到的就是有血有肉的领域对象,不是数据库表记录。所以仓库其实就是将领域层与数据库屏蔽了,我们的领域层根本看不到数据库的存在。我觉得如果用ORM框架的话,仓库可以替代DAO,如果用hibernate,那么还可以用二级缓存对领域对象进行缓存,这些都是领域层所看不到,领域层用什么对象,要么用工厂创建,要么就去仓库中取。

这是我的理解。欢迎大家多发表一下自己的看法。理解不对的地方,还请各位弟兄指点。
2 楼 shiren1118 2008-10-23  
根据ddd,那什么是ddd呢?

领域对象和pojo在概念上有什么差异呢?为啥数据访问层不能引用领域对象不呢?
1 楼 yushan 2008-10-22  
看楼主博客 已有许久了 仰慕楼主的技术啊 能加个QQ不?向楼主学习学习(偶的qq:810628208)

相关推荐

    携程去哪网DDD领域驱动设计实战开发落地分享视频教程

    视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,...大白话讲解领域驱动设计的晦涩词汇,手把手学习战略设计和战术设计,并配合实际项目进行开发落地实战,包括四层架构、洋葱架构、六边形架构、整洁架构等讲解。

    ARM 嵌入式LINUX 系统构建与驱动开发

    1 ARM嵌入式LINUX系统构建与驱动开发,北航版 驱动写的很详细,前期开发介绍也很好 2 ARM 嵌入式系统实验教程(二),北航版 有ZLG2200的原理图,实验程序和注释,了解人家是怎么开发的。 3 ARM嵌入式系统基础教程 ...

    Java开发经验及技巧集大汇总.pdf

    Java 的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1、掌握项目开发的基本步骤 2、具备极强的面向对象的分析与设计技巧 3、掌握用例驱动、以架构为核心的主流开发方法 ...

    【系统架构理论】一篇文章搞掂:领域驱动设计

    一个典型开发团队:新手、中级开发者、高级开发者/架构师(技术架构)、领域专家/产品经理(业务架构)、项目经理要解决的问题:将复杂的业务架构梳理好,并能为技术架构的设计提供要求或指导。总结:要进行一个业务...

    基于LPC2210的嵌入式系统开发方案.pdf

    设定了存储器的访问方式,设计了软件的4层结构:启动及模式规划层、硬件驱动层、操作系统层和用户应用程序层,给出了系统的存储器分配方案.规划了程序按文件系统存放的框架,特别说明了其中头文件的设计。提供了...

    软件项目管理师大全(大纲+论文格式+经典案例)

    用项目总结来减少问题的重复发生 130 有效控制质量、工期、成本三大目标 133 在项目管理中面对面交流最重要 134 IT项目如何做好进度管理 135 对“项目时间管理”的认识和体会--“赶工和快速跟进”在工作中的运用 137...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    Agile Java 测试驱动开发的编程技术.pdf Java 8 默认方法和多继承.docx Java NIO通信框架在电信领域的实践.docx java.png javaconcurrencyinpractice.pdf JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    基于Android的智能手机的设计与实现

     本文所对应的研究项目是一个基于Android智能手机的设计和实现,该智能手机在硬件上采用Marvell公司的PXA310处理器,其处理速度可达624MHz,除了一般手机必备的外设之外,还带有摄像头、蓝牙、WiFi、GPS等较高端的...

    《Android UI设计》PDF

    项目驱动 紧密结合初学者的学习习惯和认知规律,采用了大量简单而又实用的设计案例分析UI设计的基本理念。 强化技能 以移动UI设计师的核心岗位能力统筹全书的编写,代码设计突出项目开发的实战性与健壮性。 遵守...

    UML和模式应用(架构师必备).part01.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part07.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part02.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part06.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part03.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part04.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

    UML和模式应用(架构师必备).part08.rar

    第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对...

Global site tag (gtag.js) - Google Analytics