DDD的精髓(2)

简介: DDD的精髓(2)

而Domain Service只需要调用Domain Entity对象完成业务逻辑。


public class MoneyTransferServiceDomainModelImpl
      implements MoneyTransferService {
  private AccountRepository accountRepository;
  private BankingTransactionRepository bankingTransactionRepository;
  . . .
  @Override
  public BankingTransaction transfer(
      String fromAccountId, String toAccountId, double amount) {
    Account fromAccount = accountRepository.findById(fromAccountId);
    Account toAccount = accountRepository.findById(toAccountId);
    . . .
    fromAccount.debit(amount);
    toAccount.credit(amount);
    BankingTransaction moneyTransferTransaction =
        new MoneyTranferTransaction(fromAccountId,toAccountId,amount);
    bankingTransactionRepository.addTransaction(moneyTransferTransaction);
    return moneyTransferTransaction;
  }}


通过DDD重构后,虽然类的数量比以前多了一些,但是每个类的职责更加单一,代码的可读性和可扩展性也随之提高。


7.3 数据驱动和领域驱动


7.3.1 数据驱动


目前主流的开发模式是由数据驱动的。数据驱动的开发很容易上手,


有了业务需求,创建数据库表,然后编写业务逻辑,开发过程如图7-1所示。数据驱动以数据库为中心,其中最重要的设计是数据模型,但随着业务的增长和项目的推进,软件开发和维护的难度会急剧增加。


image.png


以客户关系管理(Customer Relationship Management,CRM)为例,其中很重要的概念有销售、机会、客户、私海、公海,实体的定义分别如下。


  • 销售(Sales):公司的销售人员,一个销售可以拥有多个销售机会。


  • 机会(Opportunity):销售机会,每个机会包含至少一个客户信息,且归属于一个销售人员。


  • 客户(Customer):客户,也就是销售的对象。


  • 私海(Private sea):专属于某个销售人员的领地(Territory),私海里面的客户,其他销售人员不能触碰。


  • 公海(Public sea):公共的领地,所有销售人员都可以从公海里捡入客户到其私海。


按照我们曾经学习的数据库建模理论,对于上面的场景,不难画出图7-2所示的实体联系(Entity Relationship,ER)图。



image.png


可以看到,图7-2所示的ER图中不存在公海和私海,因为所谓的机会在私海,就是这个机会是不是归属某个销售,这样我们只需要看机会上是否有salesId。如果有,说明机会被某个销售占有,也就是在私海中;反之,这个机会就在公海中。


在这种开发模式下,最后的产出是几张数据库表,以及针对表中数据进行操作的事务脚本,如图7-3所示。


image.png

相关文章
|
存储 自然语言处理 前端开发
领域驱动设计(DDD)-基础思想
一、序言     领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。 二、领域驱动设计 DDD是什么 wiki释义:     领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂
7316 0
|
3月前
|
消息中间件 测试技术 领域建模
DDD - 一文读懂DDD领域驱动设计
DDD - 一文读懂DDD领域驱动设计
513 0
|
9月前
|
搜索推荐 架构师 微服务
|
10月前
|
消息中间件 架构师 搜索推荐
DDD领域驱动设计的概念解析
DDD领域驱动设计的概念解析
161 0
|
消息中间件 开发者
DDD领域驱动设计实战(六)-领域服务(上)
DDD领域驱动设计实战(六)-领域服务
332 0
DDD领域驱动设计实战(六)-领域服务(上)
|
12月前
|
前端开发 架构师 Java
领域驱动设计DDD从入门到代码实践
在本文中,作者将借鉴《实现领域驱动设计》的做法,介绍领域驱动设计的基本概念的同时,用一个虚拟的公司和一个虚拟的项目,把领域驱动设计进行落地实践。
11234 9
领域驱动设计DDD从入门到代码实践
|
存储 人机交互 微服务
一分钟搞懂 DDD
一分钟搞懂 DDD
165 0
一分钟搞懂 DDD
|
设计模式 SQL 开发框架
DDD开篇
从知道DDD到现在已经很多年了,看了不少理论知识,在项目中也使用了DDD,碰到些问题,也有些思考,整理一下,上升一下,形成一种适合自身的方法论 在回顾过程中,首先追根溯源,什么是DDD?为什么要使用DDD?如何给别人阐述这些最基本的概念与理念,真是个难题
207 0
DDD开篇
|
自然语言处理 安全 架构师
DDD开篇总结
之前写了两篇《DDD开篇》[1]与《DDD应对复杂》[2],是时候总结一下了 对于DDD的启蒙,不管是国内还是国外思维逻辑都是一样的。或者说如果你想写本关于DDD的书,大纲似乎是一样的 首先DDD是什么?给出定义,定义有些抽象,难以一次性接受,那就通过以往问题引出DDD,这时模型、复杂度、开发流程都是自然附带出的概念,再后面就是DDD的知识结构是什么,最后就是讲解一个实例,也有些会把实例穿插到各个篇章中
177 0
DDD开篇总结
|
存储 消息中间件 JSON
领域驱动设计:从理论到实践,一文带你掌握DDD!
学习DDD一个半月,最开始学习DDD的原因是因为我负责的业务线,涉及的系统非常多,想借鉴领域驱动设计的思想,看后续如何对系统进行重构。在没有学习DDD之前,感觉DDD可能属于那种“虚头巴脑”的东西,学完DDD之后,感觉。。。嗯。。。真香!
1188 0
领域驱动设计:从理论到实践,一文带你掌握DDD!