- 反映真实世界要自动化的业务流程
- 解决现实问题
领域Domain
- Domain特指软件关注的领域
- 在不能充分了解业务领域的情况下是不可能做出一个好的软件
领域建模
领域模型驱动设计
} 分层架构
} 实体
} 值对象
} 服务
} 模块
} 聚合
} 工厂
} 资源库
分层架构:
} 将领域模型相关的代码集中到一个层中,把它从用户界面、应用和基础设施代码中分隔开来
} 释放领域对象的显示自己、保存自己、管理应用任务等职责,让它专注于展现领域模型
} 复杂的程序切分成层
} 层中采用内聚的设计
} 层仅依赖于它底下的那层
实体entity:
有一类对象拥有唯一标识符
} 能够跨越系统的生命周期甚至能超越软件系统的一系列的延续性和标识符
} 这样的对象称为实体。
值对象-value Object
} 对某个对象是什么不感兴趣,只关心它拥有的属性
} 用来描述领域的特殊方面、且没有标识符的一个对象,叫做值对象
} 能被简单的创建和丢弃,生命周期中不会被持久化
} 值对象可以被共享,值对象应该不可变
服务-service(比webservice更细粒度服务描述)
} 领域中的一些动词,代表了领域中的一个重要的行为,却不属于任何对象
◦ 服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象
◦ 被执行的操作涉及到领域中的其他的对象
◦ 操作是无状态的
} 服务对象不再拥有内置的状态
} 服务对象担当重要的协调功能
} 开发通用语言时,领域中的主要概念被引入到语言中,语言中的名词很容易被映射成对象。
语言中对应那些名词的动词变成那些对象的行为。但是有些领域中的动作,它们是一些动词,看上去却不属于任何对象。它们代表了领域中的一个重要的行为,所以不能忽略它们或者简单的把它们合并到某个实体或者值对象中。给一个对象增加这样的行为会破坏这个对象,让它看上去拥有了本该属于它的功能。
模块
} 将相关领域模型提炼分类,分而治之
} 将高关联度的模型分组到一个模块以提供尽可能大的内聚(以能完整完成任务为准)
} 分层是水平划分
} 模块是垂直划分(Domain内部)
参考架构概述
} 领域驱动设计(DomainDriven Design)有一个官方的sample工程,名为DDDSample
} 官网:http://dddsample.sourceforge.net/
} 该工程给出了一种实践领域驱动设计的参考架构
架构概述
详细架构
架构详解:Interfaces-接口层
} 该层包含与其他系统进行交互的接口与通信设施,在多数应用里
} 可能提供包括WebServices、RMI或Rest等在内的一种或多种通信接口
} 该层主要由Facade、DTO和Assembler三类组件构成,三类组件均是典型的J2EE模式
DTO
} DTO- DataTransfer Object(数据传输对象),也常被称作VO-ValueObject(值对象)
} DTO设计之初是为了将细粒度的领域对象包装为粗粒度的数据结构,减少网络通信并简化调用接口
DTO 作用
} 减少网络流量
} 简化远程对象和远程接口
} 传输更多的数据减少远程调用次数
} 避免将领域状态跨层次传递
} 由于同步和版本控制增加了复杂性
DTO 应用时序图
Assembler
} DTO与领域对象之间的相互转换工作多由Assembler承担
} 因此Assembler几乎总是同DTO一起出现。
Assembler 实现方案
Façade
} 实践Facade的过程中最难把握的问题就是Facade的粒度问题。
} 传统的Service均以实体为单位进行组织,而Facade应该具有更粗粒度的组织依据,较为合适的粒度依据有:
} 一个高度内聚的模块一个Facade
} 或者是一个“聚合”(特指领域驱动设计)一个Facade.
Facade 实现方案
Facade 应用时序图
Service
} Service会与多种组件进行交互
} 这些组件包括:
◦ 其他的Service
◦ 领域对象
◦ Repository
◦ DAO
Service 应用时序图
Domain-领域层
} Domain层是整个系统的核心层,该层维护一个使用面向对象技术实现的领域模型,几乎全部的业务逻辑会在该层实现
} Domain层包含:
◦ Entity(实体)
◦ ValueObject(值对象)
◦ Domain Event(领域事件)
◦ Repository(仓储)等
Infrastructure-基础设施层
} 基础设施层nfrastructure为Interfaces、Application和Domain三层提供支撑
} 所有与具体平台、框架相关的实现会在Infrastructure中提供,避免三层特别是Domain层掺杂进这些实现,从而“污染”领域模型
} Infrastructure中最常见的一类设施是对象持久化的具体实现
“传统”架构-贫血领域模型
DDD && SOA
} DDD 领域模型驱动设计
} SOA 面向服务的架构
转:http://blog.csdn.net/johnstrive/article/details/16805121
https://my.oschina.net/huangcongcong/blog/538568?p=1
相关推荐
本文将基于"Linux驱动开发入门"这一主题,为初学者提供一个全面的入门指南。 一、Linux驱动程序概述 Linux驱动程序是操作系统的核心组成部分,它们负责与硬件设备交互,使操作系统能够控制和管理硬件资源。在Linux ...
- **模型概述**:选择合适的驱动程序模型对于编写高效、可靠的驱动程序至关重要。驱动程序模型是指用来构建驱动程序的一套规则和技术。 - **常用模型**: - **WDM (Windows Driver Model)**:广泛应用于Windows...
在信息技术领域,操作系统与硬件之间的桥梁便是驱动程序。Windows驱动程序是让操作系统能够识别和控制硬件设备的关键组件。对于初学者来说,理解并掌握Windows驱动程序的开发是一项基础且重要的技能。本资料集合旨在...
驱动开发入门-之一:Win7 SP1 x64 驱动开发环境搭建 一、概述 在进行驱动开发之前,需要了解一些基本的名词和概念,如VxD、DDK、WDM、WDF等。VxD是早期Windows95/98的设备驱动程序,而从Windows2000开始,开发驱动...
**一、WDM驱动概述** WDM驱动是一种层次化的驱动模型,它允许多个驱动程序共享对硬件的访问,同时提供了系统级的稳定性。WDM驱动包括了功能驱动(Function Drivers)、筛选器驱动(Filter Drivers)和总线驱动(Bus ...
本教程旨在为入门者提供一个基础的驱动开发概念框架,帮助他们踏入这个充满挑战的技术领域。 首先,我们要明白驱动程序的作用。驱动程序是一种特殊的软件,它作为操作系统和硬件设备之间的桥梁,使得操作系统能够...
1. WDM模型:Windows 2000引入了Windows Driver Model (WDM),这是一个支持多处理器和即插即用的驱动模型,也兼容Win98。 2. VxD与WDMDriver:Win98支持传统的虚拟设备驱动(VxD),而Win2000则推荐使用WDM驱动,以...
#### 三、选择驱动程序模型 - **用户模式驱动程序框架(UMDF)**:适用于用户模式下运行的应用程序。这种框架降低了编写驱动程序的复杂度,使得开发者无需深入了解内核模式编程就能完成驱动程序的编写。 - **内核模式...
本文将深入探讨嵌入式Linux驱动程序设计的基本概念、设计原则和实现方法,帮助读者从入门逐步走向精通。 一、驱动程序概述 驱动程序是软件的一部分,它提供了一个接口,使得操作系统可以与硬件设备进行通信。在...
在IT领域,Linux设备驱动开发是一项关键的技术,它...通过阅读《Linux设备驱动开发入门》这本书,你将能更深入地了解这一领域,掌握驱动开发的基本技能。在实践中不断探索,才能真正成为Linux设备驱动开发的行家里手。
**WDM驱动编程入门概述** WDM(Windows Driver Model)是微软为Windows操作系统设计的一种驱动程序模型,旨在提供对硬件设备的高效、稳定的支持。它适用于各种设备,包括打印机、鼠标、网络适配器等。WDM驱动程序是...
### Windows驱动开发基础知识点 #### 一、Windows驱动开发概述 - **定义**: 驱动程序是一种特殊的软件,用于让操作系统能够识别和控制...这些知识对于初学者来说至关重要,可以帮助他们快速入门Windows驱动开发领域。
(2) 驱动模型选择:根据设备类型选择合适的驱动模型,如平台驱动、PCI驱动、USB驱动等。 (3) 编写驱动代码:实现设备的初始化、读写操作、中断处理等功能。 (4) 内核模块编译:使用make命令编译驱动模块,生成.ko...
### WinCE 下驱动开发入门知识点总结 #### 一、WinCE概述及特点 - **Windows CE**(简称WinCE)是微软公司推出的一款嵌入式操作系统,它具有体积小、可定制性强等特点,广泛应用于手持设备、车载系统、工业控制等...
这个入门教程将引导你逐步了解如何使用DriverStudio来构建驱动程序。以下是对这个主题的详细解析: 一、驱动程序开发基础 驱动程序是操作系统与硬件设备之间的桥梁,它们负责解释来自操作系统的指令并控制硬件设备...
【JSP概述】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发标准,它允许开发者在HTML或者XML文档中嵌入Java代码,从而实现动态内容的生成。JSP是Java EE(Enterprise Edition)的一部分,用于构建Web...
2. **设备模型**:讲解Linux设备模型,如总线、设备和驱动模型,如何通过udev管理系统识别和配置设备。 3. **字符设备驱动**:深入讲解字符设备驱动的开发,包括设备节点的创建、ioctl命令、中断处理等。 4. **块...