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

相关文章
|
存储 网络协议 安全
使用 NetCat 工具实现远程文件传输
NetCat(NC)是一个通过 TCP/UDP 在网络中进行读写数据工具,主要用于调式领域,传输领域甚至黑客攻击领域。利用 NetCat 工具,可以将网络中的完整数据发送至另一台主机终端显示或存储,常见的应用为文件传输、与好友即时通信、传输流媒体等功能。
1092 0
使用 NetCat 工具实现远程文件传输
|
数据挖掘 数据处理 索引
数据分析必知必会 | TGI指数分析实战
TGI指数,全称Target Group Index,可以反映目标群体在特定研究范围内强势或者弱势。
3665 0
数据分析必知必会 | TGI指数分析实战
|
弹性计算 数据库 数据安全/隐私保护
阿里云服务器申请免费试用图文教程(个人和企业均可申请)
阿里云服务器有免费试用的吗?应该如何申请?很多用户在购买阿里云服务器之前都想申请一台免费的云服务器来试用一下,本文以图文形式教大家如何申请阿里云免费试用云服务器。
2204 0
阿里云服务器申请免费试用图文教程(个人和企业均可申请)
|
5月前
|
人工智能 前端开发 小程序
AI 应用软件的开发费用
开发AI应用成本差异巨大:既含传统软件开发费,更涉及模型API、算力、数据处理等持续支出。预算分两块——前期研发(10万起,依功能复杂度分轻量/专业/旗舰三级)和上线后运营(Token、多模态、向量库等按量计费)。建议MVP验证、用现成API、选跨平台框架,避免早期自研模型。
|
10月前
|
数据可视化 数据安全/隐私保护 内存技术
国内主流cms建站系统的自定义表单功能评比
本文对比国内两大老牌CMS——PageAdmin与帝国CMS的自定义表单功能。PageAdmin支持28种字段、拖拽可视化建模,易用性与扩展性更强;帝国CMS仅支持16种字段,界面传统、组件陈旧(如已淘汰的FLASH)。自定义表单是衡量CMS专业性的核心指标。(239字)
317 6
|
11月前
|
存储 编解码 API
3步搞定!阿里云视频点播入门保姆级教程
本文是阿里云视频点播系列教程首篇,面向零基础用户,详细介绍从开通服务、上传视频、转码处理到播放器嵌入的完整流程,涵盖控制台操作与SDK开发,助你快速搭建音视频应用。
2050 1
3步搞定!阿里云视频点播入门保姆级教程
|
11月前
|
数据采集 人工智能 数据可视化
2025年数据中台系统选型指南:热门推荐与能力盘点
2025年,数据中台成为企业数字化转型核心。本文深度解析瓴羊Dataphin、腾讯云WeData、华为云DataArts Studio、网易数帆EasyData及Talend Data Fabric五大主流平台,从产品能力、行业实践、技术优势等维度对比分析,助力企业实现数据标准化、治理高效化与消费便捷化,释放数据价值,提升竞争力。
|
11月前
|
JSON BI API
拼多多API助力,实现商品批量管理,提高运营效率!
本文详解如何利用拼多多API实现商品批量管理,涵盖自动化上架、调价、库存同步、数据获取及系统集成,显著提升运营效率,降低人工成本,助力商家实现精细化、智能化运营。
1613 0
|
人工智能 Java 测试技术
【556AI】(一)IntelliJ IDEA全流程AI设计开发平台
556AI支持IDEA、PHPSTORM、PYCHARM最新版 AI平台定位是开发大型软件项目,大型软件项目代码AI生成引擎,OA/ERP/MES 百万行代码一次性AI生成 支持axure原型导入预览,集成AI软件设计/AI软件开发/AI软件测试整个流程 支持 若依 JEECG SmartAdmin THINKPHP Django等多种JAVA/PHP/python框架 实现了java php python 的统一增强行调试方式 可以链接多个AI大模型,进行AI生成代码
1591 8
|
安全 数据安全/隐私保护 Windows
乱删文件,电脑不能开机,怎么办
很多朋友在清理电脑时误删系统文件,导致黑屏、蓝屏、无限重启等问题。本文详解误删关键文件后的修复方法,包括安全模式修复、系统恢复工具、命令提示符修复引导、系统还原及重装系统等方案,帮助你应对电脑无法开机的困境。

热门文章

最新文章