`
zhanghonglun
  • 浏览: 92156 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

浅谈领域逻辑和业务逻辑

    博客分类:
  • OOAD
阅读更多

在我们在对企业级应用进行架构设计时,分层的模型已经得到了广泛的应用(当然,基于总线的SOA 架构模式,看上去也是相当的美啊)。如果采用分层架构,不管在实现时采用什么样的技术路线,SSH 也好,Seam 也罢,在架构上一般都会分为以下层次,

表现层

业务层(应用层)

领域层

持久层

 

可能有些初学者对这个架构感觉还是很抽象,难以理解。以下我结合自己的实践,谈谈我的一点理解,希望能起到抛砖引玉的作用。

 

表现层和持久层,都是比较容易理解的,因为这两个层所承担的职责非常的明确并且没有什么争议。表现层就是负责展现和用户交互的,而持久层主要负责数据的持久化。

 

业务层和领域层可能就没那么容易理解了,并且还有一些争议(焦点在于是否应该让实体类包含大量的业务逻辑)。下面我来讲讲我的理解。

简单的讲,领域层是用来描述领域概念的。领域逻辑可以理解为领域中相关概念以及这些概念间静态的,稳定的,不太会变化的关系。不管我们做什么系统,都是为某个领域服务的。比如CRM,就是服务客户关系领域的。在这个领域里面,自然会有客户,商机,产品,订单,市场活动,价格表等概念。这些概念本身是稳定的,并且其中的关系也是稳定的。对应到我们的软件模型里面来,就会体现为实体类和实体类之间的静态关系,如关联,组合,聚合,继承等(在领域层,不太会有依赖关系的)。

为了更好的理解领域模型的稳定性,可以这样看。通常我们的实体类都会做持久化(最常见的是保存到数据库中)。如果这个模型,即表达的领域概念是不稳定的,意味着我们要不断地去适应新的数据库结构(当然可以通过ORM 屏蔽掉数据库结构的影响),这样系统没法做了。另外,我们要理解一个系统,最容易的办法也是先学习该系统处理的领域概念,而一般的系统培训首先都是讲解系统处理的对象。

 

业务层用来处理业务逻辑,即动态的逻辑。对于一般的MIS 系统和OLTP 系统来讲,最常见的就是业务流程和事务等。对应到软件模型里面来,就是控制类,用来协调表现层的边界类和领域层的实体类,共同完成用户的需求(用例)。这部分逻辑是经常会变化的,为了更好地适应这种变化,便产生了各种各样的设计模式。这也正是面向对象的优点所在-- 适应变化,易于扩展。

 

哈哈,讲点玄乎的。用中国的阴阳学说来讲,领域层就是阴,而业务层是阳,阴阳平衡才是王道。

 

如果清楚了业务层和领域层的概念,就能很好的理解所谓的失血,贫血,充血,胀血模型了。这四种模型中的血都是指领域层中包含的逻辑。

失血意味着领域层中没有业务逻辑,领域类只有getter 和setter

贫血意味着领域层中有着少量的、可能是跟持久化无关的逻辑

充血意味着所有的逻辑都在领域层,业务层只是充当门面Facade

胀血意味着没有业务层了

 

个人觉得,术语并不是最重要的,比如领域模型,在业界本来就有很多种不同的解释,孔乙己才会考证,"茴"字有三种写法,我们做系统的就没有必要去咬文嚼字了。还有方法论本身,如DDD,也并不是我们要重点考虑的。最重要的应该是其背后的思想和动机,也就是我们需要利用这个架构带来价值。分层架构的核心价值还是在于各层间是低耦合的,每一层的职责又是高内聚的(层内子系统的划分也要满足这个原则)。从而提高产品的可维护性和可扩展性。架构只要从整体上来看合理,满足了上面低耦合,高内聚的原则,管它什么血,都是好的架构。

 

4
2
分享到:
评论
3 楼 zhanghonglun 2009-06-22  
开闭原则,简单讲就是"对扩展开放,对修改关闭"。也就是说当业务发生变化时,不是直接去修改已有的代码(对修改关闭),而是扩展已有的代码(对扩展开放)。
举例来讲,假设一个验证用户的服务,有多种验证方式,如DB,LDAP 等,如果这样写
public boolean authenticate(String username,String password,int type){
	boolean result = false;
	if(type==0){//DB
		//TODO
		//result= authByDB...
	}else if(type==1){//LDAP
		//TODO
		//result= authByLDAP...
	}
	return result;
}

这样显然就是不满足OCP 的,因为如果增加一种验证方式,如SSO ,必然要去改上面的代码。我们可以对这个服务做下简单的重构:
使用一个接口,定义一个验证的方法,然后针对不同的验证方式有不同的实现。这时如果需求变化,只需要增加一种实现,不需要更改之前存在的代码,这就是OCP 最简单的理解。
2 楼 lishuaibt 2009-06-22  
能讲一下对开放封闭原则的理解吗?
1 楼 biaofengwolf 2009-05-26  
架构只要从整体上来看合理,满足了低耦合,高内聚的原则,管它什么血,都是好的架构。

相关推荐

    浅谈威胁建模下的逻辑漏洞之我见.pdf

    其次,业务逻辑本身可能存在缺陷,特别是在涉及多个步骤和条件判断时,如果考虑不周全,就容易出现逻辑漏洞。此外,系统间的交互也可能成为逻辑漏洞产生的温床,例如在不同系统组件间传递数据时没有进行恰当的验证和...

    浅谈我对DDD领域驱动设计的理解 – 码农网1

    这种模式有助于保持业务逻辑和代码的一致性,避免了因忽视业务逻辑而导致的系统复杂性和维护困难。 DDD的实践通常包括以下步骤: 1. **识别领域**:明确系统所处的业务领域,理解领域内的核心问题和关注点。 2. **...

    019-浅谈渗透江湖之细水柔情.pdf

    从上述内容可以看出,业务逻辑安全是一个非常复杂且具有挑战性的领域,需要渗透测试人员拥有全面的攻击和防御知识,能够从多个角度对业务逻辑进行分析和测试,以识别和修复潜在的安全漏洞。通过对这些业务逻辑漏洞的...

    浅谈跨境支付业务的合规“困局”.pdf

    然而,随着大型银行的国际化发展,如工商银行、建设银行等在全球范围内的广泛布局,他们必须适应更复杂的国际合规标准,建立更严密的筛查逻辑和完善的管理机制。 四、应对策略与未来趋势 面对这些挑战,境内商业...

    浅谈互联网消费金融的风控逻辑_source9qp_OVO金融_风控_ovo_

    本文将围绕“浅谈互联网消费金融的风控逻辑”这一主题,结合OVO金融的案例,深入探讨风控的核心理念、常用方法及实践策略。 一、风控的重要性 在互联网消费金融中,由于交易的便捷性和匿名性,风险控制显得尤为...

    浅谈Asp.net中使用“充血模型”1

    "贫血模型"通常将数据模型、业务逻辑和数据访问分离,使得领域对象仅包含属性,而业务逻辑和数据操作在其他层中实现。这种分离虽然在一定程度上提高了代码的可读性和可维护性,但往往导致对象过于简单,缺乏行为,...

    浅谈框架与MVC

    模型包含了业务逻辑和数据访问逻辑,是数据层的代表。例如,在Web应用中,模型可能包含数据库操作、业务逻辑处理等功能。 - **视图(View)**:负责显示数据。视图是用户界面的一部分,用于呈现数据给用户。它是数据...

    浅谈MVP.doc

    ### 浅谈MVP与Model-View-ViewModel(MVVM)设计模式 #### 一、MVP设计模式概述 在软件工程中,特别是在GUI应用程序开发领域,为了更好地组织代码结构和提高开发效率,设计师和开发者们发展出了多种设计模式。其中...

    图书馆RFID系统架构浅谈.docx

    5. 后端数据库根据接收到的信息执行相应的业务逻辑和控制指令。 #### 三、RFID在图书馆行业中的应用 在图书馆行业中,RFID技术的应用可以带来诸多优势,如提高工作效率、简化图书管理流程、降低人员劳动强度等。...

    浅谈新时期会计观念的转变.pdf

    职业判断能力和逻辑分析能力也非常重要,在我国会计领域,政府颁布的各项会计制度,规定的很详细很具体,会计人员长期以来养成了“照葫芦画瓢”的习惯,不善于用职业判断的方法去思考和处理复杂的会计业务。...

    浅谈SOAP.pdf

    SOAP的优势在于其强大的规范性和成熟度,以及对复杂业务逻辑的支持。未来,SOAP可能会继续在特定领域发挥作用,尤其是在那些对安全性、事务处理和消息可靠性有较高要求的场景中。 总之,SOAP作为一种基于XML的通信...

    Android学习之浅谈对MVC模式和MVP模式的理解

    MVC是一种软件设计模式,主要用于分离应用程序的业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)。Model负责数据的处理和存储,View负责数据显示,而Controller作为桥梁,接收用户输入并调用Model进行...

    浅谈数据库设计方法.doc

    本文主要探讨了数据库设计的方法和技巧,旨在帮助数据库设计人员更好地理解和实践这一领域。 首先,设计前的准备工作至关重要。研究现有数据库设计环境是第一步,这包括了解客户的需求,检查数据库的运行状况,分析...

    浅谈数据库设计技巧-程序员应该读的

    1. 数据库模式:数据库模式是数据库结构的逻辑表示,包括实体、属性、关系和约束。理解并掌握ER模型(实体-关系模型)是设计的基础。 2. 第三范式(3NF):数据库设计通常追求高规范化,第三范式要求消除非主属性对...

    浅谈数据仓库建设中的数据建模方法

    3. **逻辑模型**:将领域模型进一步细化为数据库设计中的表、字段和关系。 4. **物理模型**:考虑具体技术实现,包括索引、存储方式等优化措施。 #### 二、为何需要数据模型? 数据模型在数据仓库建设中的重要性不...

    浅谈大数据的数据处理.pdf

    根据广东工业大学邱耀儒和沈明的《浅谈大数据的数据处理》一文,我们可以了解到,在大数据环境下,数据的处理和分析面临着新的挑战与机遇。 首先,随着移动互联网、物联网以及云计算技术的快速发展,数据存储费用...

    浅谈知识图谱.docx

    3. 知识推理是在已有知识基础上,通过逻辑推理和算法挖掘,发现新知识和隐藏关系的过程。这有助于扩展知识库,提供更深层次的理解和洞察。例如,基于分布式的知识表示,如综合向量,可以进行推理和融合,提升知识库...

Global site tag (gtag.js) - Google Analytics