`
VerRan
  • 浏览: 459534 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

浅谈Domain Model和Domain Service

阅读更多

 1.今天在学习项目的架构时发现项目的业务层,除了用ejb外还加入了domain,一时不能理解,感觉业务用ejb处理不就完了吗??还引入domain作什么用啊?这样就在网上开始搜索相关信息,终于在一位网友的博客上找到了一丝线索

(http://www.blogjava.net/AndersLin/archive/2006/06/15/53086.html)

网友问
 在他的博客里有一位网友问倒了这两者之间的区别?
 作者答1:
Domain Object关心的是自己,只处理和自己状态有关的逻辑。
Domain Service则处理Domain Object之间的关系,以及Domain Object和外部的交互。
比如一个party无法维护更新自己的hierachy,因为需要和其它的party相关;
再比如一个party无法维护更新自己的role
作者后又补充:
 如果说client(如web request)是一个业务操作的发起者,那么Domain Service是一个业务操作的实施者,Domain Object是一个业务状态的承受者。
或者更简单的说是一个调用与被调用的关系

我觉得
不过我看了后还是不很明白!看来还得慢慢理解拉!
我感觉,domain就是将一些复杂业务进行了抽取,没有将其直接在ejb中实现,也是为了代码的可读性和可维护性.
2.哈哈...又找到点信息这回这个可能要好点的!
引自: http://cpccc.blogdriver.com/cpccc/146705.html

今天读了Mark Eagle的Wiring Your Web Application with Open Source Java
文中介绍的open source方案,
表现层采用了struts,持久层采用了hibernate,中间件业务层采用了Spring容器。
可以说在技术上是很先进的。
读完全文,对于Spring,又有了一个新的认识。
确实正如Rod Johnson说的,Spring没有重复制造轮子,它提供的这种组件容器的功能把各种有用的framework结合了起来。
提供了软总线的功能,充分利用了面向接口编程,大大降低了各个层次之间的耦合。

比较让人感兴趣的是文章最后的评论。
有人评论,说作者把领域模型的商业逻辑全部都写到Service层中,这样对于领域模型domain object而言,失去了OO的意义,回到了以前面向过程的设计中去了。
并拿出Martin fowler的Anemic Domain Model来举证。

这正是有意思。
于是正好让我拜读了Martin fowler的AnemicDomainModel这篇文章。

总结一下我的读后感:
domain object表示领域组件,如果把他们相关的业务逻辑都移到万能的上帝Service组件里,domain object的意义也就不是很重要了。
这对于OO而言也是不可取的。白痴domain object没有任何意义,业务功能让他们和service组件绑定到了一齐,要复用他们,就要复用他们所有的。
这造成Service 层和domain object层耦合太大,是有弊端的。
我们可以看到这样的情况下,Service中的重复代码很多,复用性不高。

Service组件从某种程度上来说是面向过程的。和use case中的用例有一定的对应关系。当然粒度会有不同。
所以对于OO来说,service这一层代表了不好的味道,要尽量的薄。它只不过是起到一种代理facade,调度组件的作用。
对于domain object来说,必须包含维护他们自身及相互关系的业务逻辑。如果将这部分逻辑放到service层去了,就是转移了相应的逻辑,造成Service中的重复代码增多,复用性降低。而domain就是对service的进一步改进使他更OO而不是一个流程这样他就有点过程性了!先理解到这里吧!后面再继续.....

话又说回来,基于面向过程的设计对于基于web的request-response机制来说到未必不好。
web的这种一来一往的交互性是具有过程性的。
用面向过程来进行描述,很多时候是方便,自然的。
这也许就是PHP, Python 、Perl等面向过程语言获得成功的原因。

自己的心得:
看完这个有了新得认识,觉得service是有点象面向用例的,这样他就侧重于业务的流程,如果我们将一个复杂的业务写在一个service类中可见会是什么样,代码很多.而domain则是为了

分享到:
评论

相关推荐

    领域驱动(DDD)充血模式下,domain 与 Service以及Repository的解耦---DOMAIN EVENT

    首先,我们来理解DDD的核心概念——领域模型(Domain Model)。领域模型是业务逻辑的抽象表示,它包含了业务领域的实体(Entities)、值对象(Value Objects)、领域服务(Domain Services)和仓储(Repositories)...

    Domain model manual

    领域模型是软件工程中一个至关重要的概念,尤其在面向对象设计和企业级应用开发中占据核心地位。本《领域模型手册》旨在深入解析这一主题,帮助开发者理解如何有效地构建和使用领域模型。 领域模型是业务领域的抽象...

    Python库 | domainmodel-0.12.tar.gz

    通过安装和使用"domainmodel-0.12"库,开发者可以利用其提供的结构和工具,更高效地编写符合领域驱动设计原则的Python后端应用。为了进一步了解和利用这个库,开发者需要阅读相关的文档,理解库的设计理念和使用方式...

    数据库表生成domain,dao,service,controller工具

    数据库表生成domain, DAO, service, controller工具是一种高效开发辅助软件,主要针对Java Web应用程序开发。这类工具的主要目的是简化从数据库模型到应用层代码的转换过程,帮助开发者快速生成符合MVC(Model-View-...

    Silverlight WCF RIA服务(九)Domain Service 2 源代码

    Domain Service是WCF RIA服务的核心组件,它负责在客户端和服务器之间提供数据访问和业务逻辑。它构建于Entity Framework或NHibernate等ORM(对象关系映射)工具之上,允许开发者定义操作来查询、添加、更新和删除...

    lec-5 领域模型 DomainModel.ppt

    领域模型 DomainModel 领域模型是软件设计中的一种重要概念,它旨在理解系统如何工作,包括内部行为和外部行为。领域模型的目的是为了确定系统中各个元素之间的交互关系,以便产生外部行为。 领域模型为什么重要?...

    Warning! Service ro_isn needs a SELinux domain defined; please fix!.pdf

    ### SELinux权限问题详解:Service ro_isn 需要定义 SELinux Domain #### 一、背景介绍 在安卓系统中,为了确保系统的安全性与稳定性,SELinux(Security Enhanced Linux)作为一种强制访问控制机制被广泛采用。当...

    Python库 | domainmodel-0.2-py2.4.egg

    python库。 资源全名:domainmodel-0.2-py2.4.egg

    Java MVC framework, agile, fast, rich domain model, made e.zip

    "fast"和"rich domain model"可能是在强调Java MVC框架在处理复杂业务逻辑时的高效性能和强大的领域模型支持。领域模型是业务对象在软件中的表示,它封装了业务规则和数据。一个丰富的领域模型可以帮助开发者更好地...

    详细介绍ApplicationDomain和SecurityDomain

    ### 详细介绍ApplicationDomain和SecurityDomain #### 一、概述 在深入探讨ApplicationDomain和SecurityDomain之前,我们首先明确这两个概念的基本定义及其在Flash环境中的重要性。ApplicationDomain和Security...

    Define a SELinux domain for Service

    1. 在系统策略文件目录下新增ro_isn.te文件,这是定义SELinux域的主要文件,其中typero_isn,domain;声明了一个新的域类型,typero_isn_exec,exec_type,file_type;声明了该域相关的执行类型和文件类型。 2. 在...

    深入理解ApplicationDomain和SecurityDomain

    ### 深入理解ApplicationDomain和SecurityDomain #### 安全域(Security Domain)与应用程序域(Application Domain)概述 安全域与应用程序域是Flash Player中两种重要的沙箱概念,它们帮助开发者理解如何管理和...

    Xen如何创建DomainU

    3. 主函数: Xen 会分析启动选项和配置文件,根据配置信息获得 Domain 名,取得 GUEST DOMAIN 的 VCPU 数,找到映像句柄,并注册 Domain。 ```c void main(void){ 分析启动选项和配置文件(); 根据配置信息获得 ...

    Domain Model - The Theory, The Reality, The Dream

    在提供的“domain-model.ppt”文件中,很可能是对领域模型的详细介绍和实例演示,包括其概念、设计原则以及如何在实际项目中应用。通过阅读和学习这份材料,开发者可以获得更深入的洞见,提升自己在构建高效、可维护...

    Domainmodel:XText Domainmodel示例(按发行版)

    在"XText Domainmodel示例(按发行版)"这个项目中,我们可以推测这是一系列按照不同版本组织的示例,展示了如何使用XText来创建和管理领域模型。XText通过其强大的语法定义能力,允许开发者定义自己的领域模型语言...

    Optimal Transport for Domain Adaptation

    propose a regularized unsupervised optimal transportation model to perform the alignment of the representations in the source and target domains. We learn a transportation plan matching both PDFs, ...

    USB4 Inter-Domain Service.pdf

    《USB4 Inter-Domain Service协议》是USB Promoter Group由Apple Inc., Hewlett-Packard Inc., Intel Corporation, Microsoft Corporation, Renesas Corporation, STMicroelectronics, 和Texas Instruments等多家...

    Domain Generalization A Survey.pdf

    机器视觉和机器学习中的Domain Generalization研究综述 Domain Generalization(域泛化)是机器学习和机器视觉领域中一个热门的研究方向。该技术旨在解决机器学习模型在不同环境、场景或数据分布下无法泛化的问题。...

Global site tag (gtag.js) - Google Analytics