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 - 沉梦匠心 - 博客园