领域驱动设计(一)理解分层架构

  “企业级应用系统”具有复杂的业务,和相对较长的生命周期,在其生命周期中,业务规则将会是经常变化的,所使用的技术也可能发生变更。为了后期能更好的对这类系统进行扩展和维护,我们可以选择面向领域的多层架构,降低组件之间、层与层之间的耦合,这样在每次业务逻辑发生变化或者有新的业务扩展时,我们都能将变化锁定在领域层,从而最大限度的降低对其他层的影响。

  领域驱动架构通常分为四层:表示层、应用层、领域层和基础设施层。

表示层(Presentation)

  该层的主要职责是通过用户界面向用户显示数据信息,同时解释用户的命令,并把用户的请求发送到应用层。

应用层(Application)

  应用层主要用于协调不同领域对象之间的动作或领域模型与基础结构层组件之间的工作,以完成一个特定的、明确的系统任务。

  有一个需求是保存一个订单后,需要发送一封Email给用户。保存订单是业务,业务代码在领域层中;而发送Email则应是基础设施层的功能,那么就需要使用应用层来协调领域对象和基础设施对象之间的动作。

领域模型层(Domain Model)

  将业务逻辑高度内聚到领域层,所以领域层是整个系统的核心,它只与实际业务相关,不应关心任何技术细节,尽可能的做到与持久化无关。

  • 实体

  实体在领域模型中非常重要,由标识来区分的对象称为实体(即标识必须唯一)。

  • 值对象

  和实体不同,值对象没有标识,不需要跟踪值对象的状态,而且值对象非常容易创建和丢弃。值对象是不可变的,用一个构造器创建,所有属性都定义为只读。如果其中一个属性需要修改,那么就需要重新创建一个新的值对象来进行整体替换。值对象的相等性比较是通过各个属性值的比较来完成的。

  • 领域层服务

  在设计领域模型时,有些业务行为不适合放在任何一个领域对象中,或者该业务行为需要联合多个领域实体才能完成,那么我们就把其放在对应的领域服务中。领域层服务负责和领域中的实体对象、值对象以及其他领域层对象交互。

  • 聚合(Aggregate)

  聚合通常定义一组关联的对象,以及对象和关系之间的边界,作为一个数据更改的单元处理。每个聚合只有一个聚合根(实体对象)。聚合根可以引用其他聚合根,聚合内的对象可以引用聚合内的另一个对象,但是聚合边界外的任何对象不能绕过聚合根对象访问聚合内的对象。

  • 仓储(Repository)

  为每一个聚合根对象创建一个仓储,表示该种类型的所有对象为一个概念的对象集合,对仓储的访问通过类似集合的接口。仓储的要点是让开发人员将精力聚焦在领域模型逻辑上,并将真实的数据访问隐藏在仓储接口后面,这就是之前说的领域模型与持久化无关。

  • 工厂(Factory)

  很多时候,构造一个聚合以及其所有的关系、约束、规则等比较复杂,让一个实体对象自己负责对象的创建就会使得代码变得混乱。此时就需要有一个工厂,能够知道如何构建这些类型的对象,并统一进行创建。

基础设施层(Infrastructure)

  基础设施层包含任何类型的框架、数据访问代码或者公共的帮助方法等,是纯技术的一层。

时间: 2024-10-28 21:21:28

领域驱动设计(一)理解分层架构的相关文章

领域驱动设计的面向服务架构

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店

一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列可以说是刚接触领域驱动设计朋友的福音,本系列将结合领域驱动设计的思想来一步步构建一个网

(转载)浅谈我对DDD领域驱动设计的理解

原文地址:http://www.cnblogs.com/netfocus/p/5548025.html 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品.所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的. 再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备.但是最近由于各种原因,导致服务经常出故

浅谈我对DDD领域驱动设计的理解

从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品.所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的. 再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备.但是最近由于各种原因,导致服务经常出故障.所以,我们希望通过各种措施提高服务的质量和稳定性.其中的一个措施就是希望能做一个灰度发布的平台,这个

DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型:

分享我对领域驱动设计(DDD)的学习成果

本文内容提要: 1. 领域驱动设计之领域模型 2. 为什么建立一个领域模型是重要的 3. 领域通用语言(Ubiquitous Language) 4.将领域模型转换为代码实现的最佳实践 5. 领域建模时思考问题的角度 6.领域驱动设计的标准分层架构 7. 领域驱动设计过程中使用的模式 关联的设计 实体(Entity) 值对象(Value Object) 领域服务(Domain Service) 聚合及聚合根(Aggregate,Aggregate Root) 工厂(Factory) 仓储(Rep

[转]DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型:

DDD(Domain Driver Designer) 领域驱动设计简介

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型:

领域驱动设计之领域模型

百度搜索:ddd领域驱动设计 原文地址:http://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html 领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家

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

一.什么是领域驱动设计 1.1.面向业务的设计 当我们需要构建一个业务复杂的系统,我们不仅要从技术角度去构建一个稳健的系统,还要从业务角度出发,保证系统能满足业务需求. 架构设计的考虑点:不仅面向技术,更应该面向业务:面对不同的业务复杂度,选择的架构可能不同. 架构师的工作:面对复杂的业务逻辑,需要整合业务和技术才能很好地解决.业务架构驱动技术架构. 一个典型开发团队:新手.中级开发者.高级开发者/架构师(技术架构).领域专家/产品经理(业务架构).项目经理 要解决的问题:将复杂的业务架构梳理好