DDD~概念中的DDD

简介:

概念中的DDD

DDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略和类型划分。领域模型是领域驱动的核心 ,采用DDD的设计思想,业务逻辑不再集中在几个大型的类上,而是在大量相对小的领域对象上,这些类具有自己的状态和行为,每个类都是完成的独立的,并与现实领域的业务对象形成一种映射。基于DDD的架构设计,保证了系统的可维护性,扩展性和敏捷性,在处理复杂业务逻辑方面有着明显的优势!

编程世界观的改变

以下信息是从http://www.jdon.com/ddd.html上拷贝的,写的很好,这确实是一种编程世界观的改变,而传传统编程观念完全不同

过去需求分析和系统设计都是分离的,正如我们国家“系统分析师” 和“系统设计师” 两种职称考试一样,这样割裂的结果导致,需求分析的结果无法直接进行设计编程,而能够进行编程运行的代码却扭曲需求,导致客户运行软件后才发现很多功能不是自己想要的,而且软件不能快速跟随需求变化

  DDD则打破了这种隔阂,提出了领域模型概念,统一了分析和设计编程,使得软件能够更灵活快速跟随需求变化。

  DDD革命性在于:领域模型准确反映了业务语言,而传统的分层架构只关心数据, 这些数据对象除了简单读、写操作外,没有任何业务方法,被比喻成失血模型,那么领域模型这种带有业务方法的充血模型到底好在哪里?

看到领域模型代码,就看到业务需求,没有翻译没有转换,保证软件真正实现“拷贝不走样”。

DDD最大的好处是:接触到需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离。DDD让你首先考虑的是业务语言,而不是数据。重点不同导致编程世界观不同。

DDD的特点

  • 分层架构
  1. 成熟,清晰的分层架构
  2. 领域对象与世界的业务映射
  3. 明确的职责划分
  • 复用性
  1. 领域对象是核心
  2. 领域对象复用:完整的业务对象描述
  3. 设计利用:设计基于领域对象而非基于数据库的
  • 适用场合
  1. 具备复杂业务逻辑的软件开发
  2. 对设计和开发人员要求较高
  3. 不适合普通的CURD操作
  4. 系统的维护性与扩展性较高

对于DDD系统架构的分层

不使用DDD思想进行系统设计时,一般会分为3层,如数据层,业务层和表现层,而使用DDD这后,分层的方式发生了一些改变,先来看一下

  1. 表现层:也叫WEB层,UI层,一般体现出来的是页面的布局,可以用web mvc,web form,win form等去实现
  2. 应用层:用来协调应用活动,它不包含业务逻辑,它不保留业务对象的状态,但它保存应用任务的进度状态
  3. 领域层:包含领域信息,这是业务软件的核心,它保留业务对象的状态,对业务对象和它们状态的持久化工作委托给基础设施层
  4. 基础设施层:是其它层的基础,实现对业务对象的持久化,还对WEB层可以引用本层

DDD中的几个核心对象

Entities:这不是简单的poco实体,而是具备了业务逻辑的实体

Factories:工厂类,用来生产对象

Respositories:持久化,它本身就是DAO (Data Access Objects) 数据访问对象

Services:服务层,为上层提供了操作的接口,负责对象领域对象进行调试和封装,同时提供了各种形式的服务  

 OK,今天这讲先说到这里,只是概念,要求我们去理解它,事实上,这种理解确实有别于之前的架构思想,它是一种与传统方式截然不同的,需要我们用心去体会!

感谢您的阅读

 相关文章

DDD~概念中的DDD

DDD~充血模型和失血模型

DDD~基础设施层

DDD~microsoft NLayerApp项目中的层次结构图

DDD~领域层

DDD~Unity在DDD中的使用

本文转自博客园张占岭(仓储大叔的博客,原文链接:DDD~概念中的DDD,如需转载请自行联系原博主。

目录
相关文章
|
Arthas 运维 Java
arthas 的使用场景、优点和缺点
Arthas 是Alibaba开源的Java诊断工具,它可以帮助开发人员或者运维人员查找问题、分析性能和bug追踪。以下是Arthas的一些使用场景: 1. 查看目标服务器应用程序的JVM信息。 2. 方法性能的排查和跟踪。例如,在实际使用过程中发现某个接口很耗时,但是无法在本地环境复现的时候,可以通过Arthas的trace来跟踪,它会输出方法内部路径每个节点的耗时。 3. 查找全局视角查看系统的运行状况、健康状况的信息。 4. 反编译源码,查看JVM加载的是否为预期的文件内容。
1300 0
|
Java 数据库连接 数据库
强大:MyBatis ,三种流式查询方法
流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。
强大:MyBatis ,三种流式查询方法
|
17天前
|
Java 关系型数据库 MySQL
DDD 领域驱动设计:从战略到战术,终结微服务拆分的所有混乱
本文深入剖析微服务拆分困境,指出问题根源在于混淆技术边界与业务边界。提出DDD(领域驱动设计)作为破局之道:以战略设计(领域划分、统一语言、事件风暴、上下文映射)确定微服务合理边界;以战术设计(四层架构、聚合根、值对象等)保障领域模型内聚。结合电商订单域完整落地示例,揭示DDD本质是“先懂业务,再写代码”的设计思想。
282 3
|
12月前
|
移动开发 安全 API
VMware vCenter Server 8.0U3e 发布 - 集中管理 vSphere 环境
VMware vCenter Server 8.0U3e 发布 - 集中管理 vSphere 环境
556 2
|
9月前
|
人工智能 开发框架 搜索推荐
AI Agent构建强大外部工具调用能力不足,MCP Server怎样应对?MCP Serve在企业级Agent系统中的关键意义
本文AI产品专家三桥君探讨了MCP Server在企业级AI Agent系统中的关键作用,通过标准化工具接口实现AI与外部服务的无缝集成。三桥君重点阐述了分布式系统中的会话管理、状态持久化等实践方案,强调MCP Server在降低AI决策风险、提升系统可靠性方面的企业价值,为AI产品经理提供了架构设计与优化策略的实践指导。
619 0
|
设计模式 存储 算法
「全网最细 + 实战源码案例」设计模式——命令模式
命令模式(Command Pattern)是一种行为型设计模式,将请求封装成独立对象,从而解耦请求方与接收方。其核心结构包括:Command(命令接口)、ConcreteCommand(具体命令)、Receiver(接收者)和Invoker(调用者)。通过这种方式,命令的执行、撤销、排队等操作更易扩展和灵活。 适用场景: 1. 参数化对象以操作。 2. 操作放入队列或远程执行。 3. 实现回滚功能。 4. 解耦调用者与接收者。 优点: - 遵循单一职责和开闭原则。 - 支持命令组合和延迟执行。 - 可实现撤销、恢复功能。 缺点: - 增加复杂性和类数量。
448 14
「全网最细 + 实战源码案例」设计模式——命令模式
|
Windows
windows 11 恢复右键传统菜单
windows 11 恢复右键传统菜单
697 27
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
1402 6
|
Arthas 供应链 数据可视化
接口响应慢该如何排查
接口响应慢该如何排查
600 0
|
机器学习/深度学习 存储 人工智能
注意力机制最新综述解读
注意力模型(Attention Model,AM)已经成为神经网络中的一个重要概念,并在不同的应用领域进行了充分的研究。这项调查提供了一个结构化和全面的概述关于attention的发展。我们回顾了注意力机制被纳入的不同的神经网络结构,并展示了注意力如何提高神经网络的可解释性。最后,我们讨论了在实际应用中,注意力机制取得的重要影响。我们希望这项调查能够为注意力模型提供一个简明的介绍,并在开发应用方法的同时指导实践者。
注意力机制最新综述解读