`

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

    博客分类:
  • 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)

相关推荐

    组态王驱动开发简要说明与演示

    组态王驱动开发是针对工业自动化领域中广泛应用的组态软件——组态王(KINGSCADA)进行的定制化工作。驱动程序是连接硬件设备和软件应用的关键桥梁,允许软件控制和通信硬件设备。本篇文章将从基础概念、开发环境、...

    MCGS_脚本驱动开发工具

    总结,MCGS脚本驱动开发工具以其简单易用和高度灵活性,为用户提供了强大的定制能力,是实现工业自动化控制的重要手段。通过深入理解和熟练运用这一工具,用户可以打造出更加符合自身需求的监控系统,提高生产效率和...

    spring boot 领域驱动设计Demo.zip

    总结,结合Spring Boot与领域驱动设计,我们可以构建出更加符合业务逻辑的高内聚、低耦合系统,提高代码的可读性和可维护性。通过实际的项目实践,不断理解和优化DDD的应用,将有助于提升软件开发的质量和效率。

    领域驱动设计和开发实战

    例如,业务规则的处理,数据的持久化机制,缓存策略,事务管理,安全性,代码生成工具,测试驱动开发(TDD)和重构等都会影响项目的成功。此外,领域模型应具备以下特点: 1. 领域模型应专注于特定的业务操作领域,...

    pci9052驱动开发手册

    根据文件提供的内容,下面详细阐述了PCI9052驱动开发手册中涉及的相关知识点。 ### PCI9052驱动开发概述 PCI9052是PLX Technology生产的一款PCI桥接芯片,广泛应用于数据采集卡、通信卡和工业自动化等领域。驱动...

    组态王软件驱动程序开发指南

    - **采用COM组件技术**:通过使用微软的标准COM组件技术,组态王驱动开发包能够创建多个相互独立的对象,每个对象都能拥有自己的变量,从而实现了高度的灵活性和扩展性。 - **生成DLL文件**:最终的驱动程序将以DLL...

    领域驱动聚合设计工作坊

    领域驱动设计(DDD)是一种软件开发方法,它强调通过深入理解和建模业务领域来创建复杂的软件系统。在DDD中,聚合是一种重要的设计模式,用于保持数据的一致性和完整性。本工作坊将深入探讨如何识别和设计聚合,以及...

    领域驱动设计 软件核心复杂性应对之道2

    采用敏捷开发方法,如TDD(测试驱动开发)、BDD(行为驱动开发)等,可以帮助团队更快地适应变化。 5. **重构模型与代码**:随着对业务理解的加深,可能会发现原有的领域模型存在不足之处。此时需要对模型进行重构...

    vc++开发驱动程序详解

    总结,VC++驱动程序开发涵盖了从基础知识到高级技术的广泛领域,包括驱动类型选择、框架使用、调试方法、签名部署以及生命周期管理等。通过深入学习和实践,开发者可以利用VC++有效地创建高效、稳定的驱动程序,实现...

    领域驱动设计学习总结(一)

    总结来说,领域驱动设计是解决复杂业务系统的一种有效方法,通过深入理解业务,构建强大的领域模型,可以使软件更好地适应不断变化的业务需求。在实践中,需要不断探索和优化,找到最适合项目的技术实现方式。

    Linux驱动开发庖丁解牛

    ### Linux驱动开发庖丁解牛 #### 一、前言 在深入探讨Linux驱动开发之前,我们首先要认识到,Linux世界博大精深,...随着对Linux内核和驱动开发理解的深入,可以尝试更复杂的驱动开发项目,不断拓展自己的技能树。

    鼠标驱动程序源代码,windows下WDM开发.zip

    《Windows下WDM驱动开发——基于鼠标驱动程序源代码解析》 Windows驱动程序开发是操作系统底层编程的重要领域,尤其在Windows设备驱动模型(WDM,Windows Driver Model)中,开发者可以构建驱动程序来支持硬件设备...

    DDD 领域驱动设计-软件开发中的挑战和问题

    ### DDD领域驱动设计——软件开发中的挑战与解决方案 #### 一、引言 随着企业需求的日益复杂,软件开发面临着前所未有的挑战。传统的开发模式往往难以满足快速变化的业务需求,导致系统的复杂度增加、可维护性下降...

    Abp简单开发流程文档.rar_abp_abp领域驱动

    ABP(ASP.NET Boilerplate)是一个强大的框架,用于构建现代Web应用,尤其适用于采用领域驱动设计(DDD)的项目。本篇文章将详细讲解基于ABP的简单开发流程,以及如何利用该框架进行领域驱动设计。 1. **ABP框架...

    领域驱动设计和开发实战.pdf

    总结而言,领域驱动设计是一种强大的工具,可以帮助开发人员创建符合业务需求、易于维护和扩展的软件。通过深入理解和实践DDD,团队能够构建出更加健壮、灵活的系统,更好地应对业务变化,从而提高企业的竞争力。

    《Android应用开发》开放实验项目总结报告-模板.doc

    《Android应用开发》开放实验项目总结报告是对学生在淮海工学院计算机工程学院进行的一次Android应用开发实践的详尽回顾。这次实验旨在让学生初步掌握Android应用开发的基础知识和技术,以便为未来的深入学习和实际...

Global site tag (gtag.js) - Google Analytics