DDD设计学习

之前在研究生项目中遇到的问题便是:

随着业务需求的不断改变,需要在原有项目代码中不断进行修改,导致代码不断累积。

那如何构建高质量应用,那就要遵循三大设计原则:

1.单一职责原则:一个类只负责单一的职责;

2.开放封闭原则;

3.依赖反转原则:程序之间只依赖于抽象接口,而不依赖于具体实现

坏的代码如下所示:

可见代码如下所示,调用了第三方的服务,造成了代码的不稳定性(风控)

改进后的方法,首先设计了充血模型,即类和有关方法写在一块(存钱取钱,即对于类对象属性有改动的方法):

使用充血模型的实体对象,描述核心的业务能力(每一个实体只承担与其直接相关的属性和业务逻辑)(有可能会产生很多类造成类爆炸的问题,因此需要聚合减少类的数量)

将数据库的操作做隔离,定义接口,并定义实现类用于实现有关数据库的操作,而用户调用只需要调用api,不用管代码中的具体内容(这样如果有业务更改,如换框架操作数据库,只需要修改实现类的具体代码,而不用修改其他地方的代码,做到了隔离)。

使用仓库与工厂,封装实体持久化操作,摆脱数据库限制

构建防腐层,隔离外部服务!

即将各种业务(使用第三方api)的代码用接口封装,在最后进行直接调用,保证低耦合。同时这样也方便进行单元测试,将各种业务拆分成子业务,可以更加精准定位问题所在之处。

DDD总体设计如下所示:

总体来说,MVC架构设计的技术逻辑非常清晰,controller就是负责交互的,model就是负责业务处理诸如此类;然而业务逻辑相当不清晰,难以区分service层中各类分别是处理什么业务的;而DDD设计拥有比较清晰的业务逻辑,优先强调逻辑边界,适用于微服务的架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

frp 内网穿透 linux部署版

frp 内网穿透 linux部署版 前提安装 frp阿里云服务器配置测试服务器配置访问公网 前提 使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过访问公网 IP 直接可以访问到内网的测试环境。准备如下: 公网 IP已部署好的测试服务 IP:端口号阿…

Harbor 的安装及使用

Harbor 安装官网手册: https://goharbor.io/docs/2.10.0/install-config/download-installer/ Harbor 发布包地址: https://github.com/goharbor/harbor/releases Harbor 的架构查看: https://github.com/goharbor/harbor/wiki/Architectur…

Redis 存储原理和数据模型

redis 是不是单线程 redis 单线程指的是命令处理在一个单线程中。主线程 redis-server:命令处理、网络事件的监听。 辅助线程 bio_close_file:异步关闭大文件。bio_aof_fsync:异步 aof 刷盘。bio_lazy_free:异步清理大块内存。io_…

【C++精简版回顾】15.继承派生

1.继承派生的区别 继承:子继父业,就是子类完全继承父类的全部内容 派生:子类在父类的基础上发展 2.继承方式 1.public继承为原样继承 2.protected继承会把public继承改为protect继承 3.private继承会把public,protected继承改为pr…

深入理解c指针(四)

目录 六、assert断言 七、指针的使用和传址调用 1、strlen的模拟实现 2、传值调用和传址调用 3、练习-字符串逆序 在深入理解c指针&#xff08;三&#xff09;提到&#xff0c;在实际使用指针前可以检测其是否指到有效空间&#xff1a; #include<stdio.h> int mai…

《机器学习方法》-----李航

机器学习方法 下载地址&#xff1a;vx: zhangfeifeina

内置kpi接口短视频解析html源码

内置kpi接口短视频解析html源码&#xff0c;复制代码即可解析视频并 去水印 源码免费下载地址专业知识分享社区-专业知识笔记免费分享 (chaobiji.cn)

kitex 入门和基于grpc的使用

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于kitex系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系…

干货分享丨3种SQL语句优化方法,软件测试必备!

关于SQL语句的优化&#xff0c;本质上就是尽量降低SQL语句的执行时间&#xff0c;对于如何降低SQL语句的执行时间&#xff0c;可以从以下几个方面入手。 一、降低SQL语句执行时的资源消耗 这是我们在数据库性能调优中常用的方法&#xff0c;该方法以分析SQL语句的执行计划为切…

亚马逊,速卖通,shopee测评补单,如何构建一套完整的环境方案

无论是做普通测评&#xff0c;还是做撸卡撸货&#xff0c;采退的只有在安全稳定的环境下才能不被平台检测&#xff0c;造成被砍单或F号&#xff0c;所以在没有专业团队指导下&#xff0c;建议大家不要轻易尝试&#xff0c;毕竟试错和时间成本才是最大的 进行测评时&#xff0c;…

C语言数据结构——栈

目录 ​编辑 0.前言 1.栈的基本概念 2.栈的实现 2.1数组OR链表&#xff1f; 2.2静态栈的实现 2.3动态栈的实现 3.栈的应用 4.结语 &#xff08;图片由AI生成&#xff09; 0.前言 在计算机科学中&#xff0c;数据结构是组织、管理和存储数据的有效方式&#xff0c;以…

全网爆火的 MBTI 测试,是隐藏的割韭菜工具?

小伙伴们&#xff0c;谁能想到&#xff0c;作为一名冲浪老手&#xff0c;果子在网上又被骗了。 事情是这样的&#xff0c;前几天&#xff0c;我刷微博&#xff0c;看到一个推荐&#xff0c;大概如下图&#xff0c;是一个 MBTI 人格测试。 MBTI 测试&#xff0c;果子早就做过了…