`
xp9802
  • 浏览: 1204981 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

领域驱动设计下系统层次结构风格

 
阅读更多

传统的三层架构

最简单的分层方式自然就是“表现层、业务逻辑层和数据访问层”,我们可以用下图来表示这个思想:

注意图中打虚线的“基础结构层”,从实践的表现上来看,这部分内容可能就是一些帮助类,比如 SQLHelper之类的,也可能是一些工具类,比如TextUtility之类。这些东西可以被其它各层所访问。而基于分层的概念,表现层只能跟业务逻辑层打交道,而业务逻辑层在数据持久化方面的操作,则依赖于数据访问层。表现层对数据访问层的内容一无所知。

从领域驱动的角度看,这种分层的方式有一定的弊端。首先,为各个层面提供服务的“基础结构层”的职责比较紊乱,它可以是纯粹的技术框架,也可以包含或处理一定的业务逻辑,这样一来,业务逻辑层与“基础结构层”之间就会存在依赖关系;其次,这种结构过分地突出了“数据访问”的地位,把“数据访问”与 “业务逻辑”放在了等同的地位,这也难怪很多软件人员一上来就问:“我的数据表该如何设计?”

 

 

领域驱动设计的分层

领域驱动设计将软件系统分为四层:基础结构层、领域层、应用层和表现层。与上述的三层相比,数据访问层已经不在了,它被移到基础结构层了。

  • 基础结构层:该层专为其它各层提供技术框架支持。注意,这部分内容不会涉及任何业务知识。众所周知的数据访问的内容,也被放在了该层当中,因为数据的读写是业务无关的
  • 领域层:包含了业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型(Domain Model)。领域驱动设计提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。有关领域对象和领域服务的内容,
  • 应用层:该层不包含任何领域逻辑,但它会对任务进行协调,并可以维护应用程序的状态,因此,它更注重流程性的东西。在某些领域驱动设计的实践中,也会将其称为“工作流层”。应用层是领域驱动中最有争议的一个层次,也会有很多人对其职责感到模糊不清。比如,有些国外的开发人员会觉得,既然不包含领域逻辑,那又如何协调工作任务呢?
  • 表现层:这个好理解,跟三层里的表现层意思差不多,但请注意,“Web服务”虽然是服务,但它是表现层的东西(ExtJS框架+Asp.net MVC框架)

从上图还可以看到,表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样做会直接将领域对象的行为暴露给表现层

 

 

系统结构

由于是领域驱动设计,本案例系统分层与传统分层略有不同。分为四层:展现层、应用服务层、领域层和基础结构层。展现层采用ASP.NET MVC框架实现;应用服务层则是一个WCF Service;领域层采用Entity Framework结合领域接口;基础结构层则为整个应用提供了IoC、Caching、Specifications、Repository等的具体实现。整个系统架构基本上可以以下图描述:

 

 

 

 

需要说明的是,在上图中的Domain Model和EdmRepository之间出现了双向依赖。其实,Domain Model只依赖于仓储(Repository)的接口,而EdmRepository是基于Entity Framework的一种仓储实现方式,它实现IRepository接口,同时也对Domain Model产生依赖,以获得对聚合根的访问。关键的一步在于,EnterpriseLibrary Library采用依赖注入,将EdmRepository注射到Domain Model中,于是,Domain Model根本不依赖于仓储的具体实现方式,保证了领域模型层面的纯净度。

仓储的实现可以用下图表述:

 

从本文还可以了解到,依赖注入是维持领域模型纯净度的一大利器;另一大利器是领域事件,我将在后续的文章中详述。对于本文开始的第三个问题,也就是仓储实现的可扩展性,将在下篇文章中进行讨论,包括的内容有:事务处理和可扩展的仓储框架的实现。

 在面向对象的程序中,用户界面(UI)、数据库和其他支持代码,经常被直接写到业务对象中去。在UI和数据库脚本的行为中嵌入额外的业务逻辑。出现这种情况是因为层短期的观点看,它是使系统运行起来的最容易的方式。

      当与领域相关的代码和大量的其他代码混在一起时,就很难阅读并理解了。对UI的简单改动就会改变业务逻辑。改变业务规则可能需要小心翼翼地跟踪UI 代码、数据库代码或者其他的程序元素。实现一致的模型驱动对象变都不切实际,而且自动化测试也难已使用.如果在程序的每一个行为中包括了所有的技术和逻辑,那么它必须很简单,否则会难以理解。

                  

 

用户界面层 负责向用户显示信息,并且解析用户命令。外部的执行者有时可能会是其他的计算机系统,不一定非是人
应用层 定义软件可以完成的工作,并且指挥具有丰富含义的领域对象来解决问题。这个层附负责的任务对业务影响深远,对跟其他系统的应用层进行交互非常必要。这个层要保存简练。它不包括处理业务规则或知识。只是给下一层中相互协作的领域对象协调任务、委托工作。在这个层次中不反映业务情况的状态,但反映用户或程序的任务进度的状态
领域层 负责表示业务概念、业务状况的信息以及业务规则。尽管保存这些内容的技术细节由基础结构层兰完成。反映业务在的状态在该层中被控制和使用。这一层是业务软件的核心
基础结构层 为上册提供通用的技术能力;应用的消息发送、领域持久化,为用户加盟绘制窗口等。提供架构框架,基本结构层还可以支持这四层之间的交互模式

 

在一个复杂的程序进行层次划分。为每一层进行设计,每层都是内聚的而且只依赖于它的下层。采的用标准的架构模式来完成与上层松散关联。将所有与领域模型相关的代码集中在一层,并且家它与用户界面层、应用层和基础结构层的代码分离。领域对象可以将重点放在表达领域模型上,不需要关心他们自己的显示、存储和管理应用任务等内容。这样使模型发展得足够丰富和清晰,足以抓住本质的业务知识并实现它。

分享到:
评论

相关推荐

    软件体系结构风格.ppt

    软件体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。它定义了描述系统的术语表和一组指导构建系统的规则。 软件体系结构风格的重要性在于,它...

    第3章 软件体系结构风格_设计模式_

    在软件开发领域,软件体系结构风格与设计模式是构建高效、可维护且可扩展系统的基础。本章将深入探讨这两个核心概念,它们是软件设计师的工具箱中的关键元素,为解决复杂问题提供了标准方法。 软件体系结构风格是指...

    2022年软件结构设计-分层系统风格讲义(共16张PPT).pptx

    软件结构设计中,分层系统风格是一种非常重要的设计风格,它将软件系统分解成多个层次,每个层次都有其特定的功能和责任。这样可以使得软件系统更加模块化、可维护、可扩展。 分层系统风格的主要特征是,每个层次都...

    软件体系结构风格

    总之,软件体系结构风格是软件设计中的核心要素,理解其原理和应用场景对于开发出高效、可扩展、易于维护的系统至关重要。不同的体系结构风格有各自的优缺点,需要根据具体项目需求进行选择和优化。

    软件设计模式与体系结构期末课程大作业-服装管理系统

    在软件开发领域,设计模式和体系结构是两个至关重要的概念,尤其在大型项目中,它们对于软件的可维护性、可扩展性和可复用性起着决定性的作用。本项目——“服装管理系统”是一个很好的实践案例,让我们深入探讨其中...

    chap软件体系结构的风格完美版资料.ppt

    首先,软件体系结构风格是用于描述一系列系统组织方式的模式,这些模式在特定应用领域内广泛存在。它定义了一组词汇表,包括系统中的构件(Components)和连接件(Connectors),并规定了如何将这些元素组合以构建一...

    系统架构设计师教程(第2版)-希赛版.pdf

    2. 系统设计方法:这涉及到架构设计的方法学,比如结构化设计方法、面向对象设计方法、面向服务设计方法等。这些方法论指导架构师如何从宏观角度对系统进行设计。 3. 设计模式:设计模式是软件工程领域的一种经验...

    软考系统架构设计师考前背诵

    **定义**: 软件架构风格是指描述某一特定应用领域中系统组织方式的惯用模式。这种风格定义了一个系统家族及其相关的词汇表和约束条件。词汇表包括构件和连接件类型,而约束则规定了如何将这些构件和连接件组合起来。...

    软件设计模式与体系结构课后习题代码(孙玉山).zip

    常见的软件体系结构风格有: 1. 层次型架构:将系统划分为多个层次,每一层都只与相邻层进行交互。 2. 微服务架构:将大型应用拆分为一组小型、独立的服务,每个服务都运行在其自己的进程中,通过API进行通信。 3. ...

    系统体系架构设计说明书

    本文档涵盖了系统设计的关键方面,包括但不限于需求分析、设计约束、设计策略、系统总体结构、子系统结构与功能、开发与测试环境配置等内容。这些内容构成了系统体系架构设计的核心要素。 **读者对象:** 本说明书...

    2010软件体系结构思考题

    软件体系结构风格,如层次结构和基于消息的层次结构,主要区分在于组件间的通信方式。B/S(浏览器/服务器)结构常用于Web应用,减少了客户端的负担;C/S(客户机/服务器)结构则分为两层和三层,两层结构简单但维护...

    软件体系结构提纲总结1

    - **开发视图**着重于模块组织,强调软件的可维护性和重用性,通常采用层次结构风格。 - **进程视图**关注并发性、分布性和系统集成,描述任务执行的并发结构。 - **物理视图**涉及软件与硬件的映射,考虑系统...

    软考系统架构师案例分析知识点整理

    - 设计系统的处理流程以确保高效的数据处理。 - **人机界面设计**: - 界面布局、交互方式等方面的设计。 - **文件涉及**: - 文件的结构、格式和管理规则。 - **存储设计**: - 数据存储方式的选择及其优化...

    系统架构设计师-论文题目汇总.pdf

    它涉及的领域包括但不限于软件开发过程、软件体系结构的演化、面向服务架构设计、NoSQL数据库技术、软件架构风格、软件系统建模方法、无服务器架构、软件质量保证、软件系统架构评估、软件设计模式、数据访问层设计...

    软件设计模式与体系结构ppt课件整理(考试必备)

    常见的软件体系结构风格有: 1. 单体架构:所有功能都集中在一个大的可部署单元中,适用于小型项目,但随着项目复杂性的增加,维护和扩展会变得困难。 2. 微服务架构:将大型系统拆分为一组独立的服务,每个服务都...

    软件架构风格整理及总结

    在IT行业中,软件架构风格是构建复杂系统的基础,它决定了系统的组织结构和设计原则。本资料包"软件架构风格整理及总结"包含了丰富的资源,旨在帮助读者深入理解各种经典架构风格,这对于架构师的成长和相关考试的...

    系统架构设计师第九章软件架构设计.pdf

    在信息系统架构设计这一领域,系统架构设计师扮演着至关重要的角色,他们负责规划、设计和实施复杂的软件系统。第九章“架构设计”主要涵盖了系统架构的概念和软件架构风格这两个核心主题,通过历年来的试题分析,...

    软考,软考高级系统架构师论文范文50篇(带目录),系统架构设计师教程(清华版本),系统架构设计师教程-希赛第四版

    2. **架构风格与模式**:掌握常见的架构风格,如层次结构、客户-服务器、事件驱动等,以及相应的架构模式,如工厂模式、策略模式等。 3. **需求分析**:学习如何分析和表达业务需求,转化为技术需求,并进行功能和非...

    软件架构风格简介

    软件架构风格是指软件系统设计中的一系列常见模式,这些模式定义了系统的整体结构和组件之间的交互方式。理解不同的架构风格对于选择合适的软件设计方案至关重要。 #### 三、常见的软件架构风格 1. **分层架构**:...

Global site tag (gtag.js) - Google Analytics