DDD领域驱动

news/2024/12/29 23:44:23/

Domain Driven Design

DDD,2003年出的书(Eric Evans)。微服务,2013年。

八叉说DDD:为什么说《领域驱动设计》已经过时了

评论:

他站的基础是互联网企业。但是DDD建模更为重要的还是针对行业软件领域。DDD解决的并不是他说的业务变更的问题DDD解决的是行业专家和软件厂商之间的认知鸿沟的问题,解决的是行业专家的领域语言如何一步一步转化成软件产品的问题。DDD模式不是万能模式,为了DDD而DDD肯定是错误的。但是说DDD是过时的,这种说法则更为偏激。

八叉说DDD:为什么说《领域驱动设计》已经过时了_哔哩哔哩_bilibili

DDD——马士兵

领域,子域,核心域,通用域,支撑域,实体,聚合,聚合根,仓库,工厂...

先脉络,后细节。

设计方面:学《坦克》《抽丝剥茧》

业务快速变化,驱动软件系统越变越复杂。

DDD就是为了解决特别复杂而且变化快速的软件系统。(快速变化,复杂的系统

设计课,仁者见仁智者见智,不同的人不同的方案。互动,探讨。

贫血模式:只有属性,以及get和set,取值和赋值。

充血模式:将属性的变化放入其中。对属性的校验放入其中。做成一个包含业务的对象。

例如:实体Student,对于study,直接student.study(),是很爽的,比studentService.study()用起来舒服。

充血模式

代码案例:

public class VirtualWallet {private Long id;private Long createTime = System.currentTimeMillis();;private BigDecimal balance = BigDecimal.ZERO;private boolean isAllowedOverdraft = true;private BigDecimal overdraftAmount = BigDecimal.ZERO;private BigDecimal frozenAmount = BigDecimal.ZERO;public VirtualWallet(Long preAllocatedId) {this.id = preAllocatedId;}public void freeze(BigDecimal amount) { ... }public void unfreeze(BigDecimal amount) { ...}public void increaseOverdraftAmount(BigDecimal amount) { ... }public void decreaseOverdraftAmount(BigDecimal amount) { ... }public void closeOverdraft() { ... }public void openOverdraft() { ... }public BigDecimal balance() {return this.balance;}public BigDecimal getAvaliableBalance() {BigDecimal totalAvaliableBalance = this.balance.subtract(this.frozenAmount);if (isAllowedOverdraft) {totalAvaliableBalance += this.overdraftAmount;}return totalAvaliableBalance;}public void debit(BigDecimal amount) {BigDecimal totalAvaliableBalance = getAvaliableBalance();if (totoalAvaliableBalance.compareTo(amount) < 0) {throw new InsufficientBalanceException(...);}this.balance.subtract(amount);}public void credit(BigDecimal amount) {if (amount.compareTo(BigDecimal.ZERO) < 0) {throw new InvalidAmountException(...);}this.balance.add(amount);}
}

充血模型&DDD - 沉梦匠心 - 博客园


http://www.ppmy.cn/news/245861.html

相关文章

Django_ORM框架

1. ORM框架介绍 对象关系映射&#xff08;Object Relational Mapping&#xff0c; 简称ORM&#xff09;模式是一种为了解决面向对象与关系数据库存在互不匹配的现象的技术。ORM框架是连接数据库的桥梁&#xff0c;只要提供了持久化类与表的映射关系&#xff0c;ORM框架在运行时…

DDD框架

DDD框架 参考: https://www.cnblogs.com/daoqidelv/p/7499662.html https://www.cnblogs.com/xiaofuge/p/12914870.html https://www.zhihu.com/question/25089273 DDD&#xff08;domain driven design领域驱动设计&#xff09;框架包括 User Interface&#xff08;门面层&am…

【ORM框架】

Django ORM框架操作数据库 Django ORM框架定义步骤样例1.定义模型类2.迁移 ORM对象构成全局配置文件settings.py中配置数据库ORM修改表中已有字段名ORM修改已有字段&#xff1a;模型类中修改字段名&#xff08;一般不能修改id主键&#xff09;重新执行迁移脚本 Django ORM框架 …

Flask-ORM框架-CRUD

使用了Flask-SQLAlchemy作为ORM框架&#xff0c;来更方便的对数据库进行读写&#xff0c;增删改查是数据库的基本操作&#xff0c;今天这一章节就在对原先的后端做兼容MySQL改造的同时&#xff0c;也对“删、改、查”做一个详细的讲解。 模型定义 上一章节在models.py中定义了…

什么是ORM框架?

ORM概念 什么是“持久化” 即把数据&#xff08;如内存中的对象&#xff09;保存的磁盘的某一文件中。 常用的ORM半自动框架如Mybatis&#xff0c;全自动ORM框架JPA。 JPA详解 什么是持久层 持久层&#xff08;Persistence Layer&#xff09;,即实现数据持久化应用领域的一个…

SSM框架整合(企业权限管理系统)

项目简介 基于Spring、SpringMVC、Mybatis框架整合的权限管理系统&#xff0c;主要技术是运用了SpringSecurity框架对用户访问页面的某些模块设置权限&#xff0c;具体可以看下文权限控制核心内容。 开发环境和使用的技术&#xff1a; IntelliJ Idea 、JDK 1.8 SVN 、Orcale、…

什么是ORM以及ORM框架

1-1.对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 2-1.ORM框架是连接数据库的桥梁&#xff0c;只要提供了持久化类与表的映射关系&#xff0c;ORM框架在运行时就能…

主流的ORM框架

.NET(C#)主流的ORM框架 SqlSugarDos.ORMChloeStackExchange/DapperEntity Framework (EF)NHibernateServiceStack/ServiceStack.OrmLitelinq2dbMassivePetaPoco 介绍 1、SqlSugar是国人开发者开发的一款基于.NET的ORM框架&#xff0c;是可以运行在.NET 4. & .NET CORE的…