java和建模,java领域模型设计实例

  java和建模,java领域模型设计实例

  最近我在项目中重新整理了领域模型建模的思路。记得范凯(罗宾

  2005年

  我相信你对2000年总结的“领域模型”的四种风格以及它们的一些变种很熟悉。从目前来看,无论其划分是否合理,是否适合任何项目,讨论都是有意义的。从

  从2004年到2008年

  近年来,领域模型的话题一直是各种技术论坛和邮件列表中必谈的话题之一。在这里,我只想表达一下我对‘领域模型建模’这个问题的看法。我相信讨论还会继续,这就是3354进化的精髓。这里所有的观点都是基于Java环境下的应用,其他语言环境另当别论。

  相关术语和概念首先,我们来明确一些相关的术语和概念。很多时候发现,在我们讨论问题之前,没有一个共同的基本假设作为前提,导致越来越多的混乱,引入更多的其他问题。在这里,我将对本文涉及的几个非常基本的概念做一个统一的假设。

  POJO(普通旧Java对象

  )POJO是一个简单常规的Java对象,包含业务逻辑处理或持久化逻辑,但不是JavaBean、EntityBean等。它没有任何特殊角色,也不继承/实现任何其他spring mvc类或接口(java.io.Serializable除外)。例如,下面的类是一个POJO。注意商业逻辑方法:

  /**

  * POJO用户描述。

  * @作者88250

  * @版本1.0.0.0,2009年1月15日

  */

  公共类用户实现可序列化{

  /**

  *用户名。

  */

  私有字符串名称;

  /**

  *默认构造函数。

  */

  公共用户(){

  }

  /**

  *用户登录业务逻辑。

  */

  公共void登录(){

  //.

  }

  /**

  *获取该用户的名称。

  * @返回名称的值

  */

  公共字符串getName() {

  返回名称;

  }

  /**

  *设置该用户的名称。

  * @param name名称的新值

  */

  public void setName(字符串名){

  this.name=name

  }

  从OO的角度来看,这是一个纯Java类,有状态和行为,构成了这个用户类的职责。可惜现在POJO这个词简直被滥用了。大家认为只要描述了一个域实体,纯数据类就是POJO。

  领域模型

  按照马丁叔叔的解释,域模型就是统一行为。

  的对象模型。从OO的角度来说,没有什么困难和疑惑,但是当我们开始为具体项目设计OO的时候,就出现了很多问题。稍后,将阐述实现领域建模中的一些“公认的”问题。我们来看看维基百科上对领域模型的解释。

  ,这涉及到“领域层(Domain Layer

  )”,并解释了DDD的领域模型是领域层的一部分。如下图:

  根据维基百科上的解释,领域层和业务层

  是同一个概念,这个划分真的是纯DDD。但是这种思想和JavaEE规范中的分层思想有点冲突,和EJB 3编程模型有明显的冲突。

  各种风格(style)的领域模型这里的“风格”是根据马丁的观点来阐述的。在以前的讨论中

  在中,有四种可行的模型:

  贫血模型

  四款基本都是罗宾汉。

  JavaEye

  社区思考和讨论的结果。但是我觉得按照马丁的模型来讨论更简单。有两种可行的模式:

  贫血的贫血域模型。

  富域模型(Rich Domain Model)

  贫血的贫血域模型

  贫血领域模型是唯一

  包含默认构造函数accessors方法,没有任何逻辑处理。逻辑处理放在xxxManager中,事务脚本(Transaction Script

  ,PoEAA

  )进行操作。

  丰富域模型

  )

  富域模型是DDD描述的模型,完全面向对象的关注点。

  “公认的”问题

  EJB 3 & JPA

  众所周知,EJB 3 JPA的编程模型是典型的贫血模型,也是JavaEE推广的最佳实践。

  ,唯一正统的编程模型。在该模型中,EJB扮演业务逻辑处理的角色,在分层设计中处于服务层/业务层。而JPA entities扮演的是典型的纯数据类。

  ,其行为完全由EJB负责。也许这些在早期的SSH中是无状态的。

  框架如此深入人心,息息相关。目前Seam Framework/WebBeans规范是解决客户端和服务器端状态问题的很好的实现和规范。另外,Seam中的实体也可以作为组件注入/弹出,所以Seam正在尝试。

  为开发者提供一个DDD框架。

  领域逻辑与业务逻辑

  如果你是DDD的纯粹支持者,领域逻辑和业务逻辑是没有区别的,统称为领域逻辑。下面的域逻辑和服务逻辑是针对EJB 3 JPA的纯用户的。

  领域逻辑和服务业务逻辑的划分原则:

  根据是否依赖持久逻辑。

  该模型仅包含与持久性无关的。

  领域逻辑和那些依赖于持久性的逻辑应该被分离到服务层中。

  使用罗德约翰逊的“个案处理”原则。

  它与领域对象的状态密切相关,具有很高的可重用性。

  在领域中,重用性低的和与领域对象状态不密切相关的被置于服务中。

  这样看来,似乎解决了Java应用中使用“正统”方式(JavaEE规范)实现域驱动开发的问题。但是你不觉得太复杂了,画蛇添足吗?

  结论

  领域驱动设计(DDD)需要开发团队在特定行业的积累。

  要等到一定时间才能做到,这涉及到企业(客户)的核心价值实现和业务实现复用。

  如果不是为了这个最终目的

  ,Java下的DDD要慎用。在为您的Java项目建模时,一定要分析项目的范围,并仔细选择技术。一般来说,贫血域模型是最容易设计和实现的,它足以满足一般的Java Web项目。并且在复杂的JavaEE项目中使用富域模型(例如,在实现SOA时)。不要用刀杀鸡:-)

  引用表

  下面这篇文章是精华中的精华。有兴趣有时间的朋友一定不要错过:-)

  贫血域模型

  总结最近关于领域对象及相关问题的讨论。

  一个简单的例子:贫血模型或领域模型

  领域模型实现综述

  领域模型的价值与困境

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: