DDD领域驱动设计(二)

软件系统复杂性的应对

解决复杂和大规模软件的武器可以粗略的归位三种:抽象 分治和知识

  • 抽象: 使用抽象能够精简问题空间,而且问题越小越容易理解。比如你去一个地方 一开始的时候并不需要确定用什么方式到达。
  • 分治: 类似算法里面的dp用的就是分治的想法。分割后的问题需要足够小,方便一个人解决它。然后考虑如何组合这些分割的小东西。分割的越合理越容易理解,在搭积木的时候更加容易。用业界的话来说就是 <高内聚低耦合>
  • 知识 顾名思义 DDD就是知识中的一种

与微服务架构相得益彰

微服务架构众所周知。不做赘述。我们创建一个微服务时,需要创建一个高内聚 低耦合的微服务。而DDD的限界上下文则完美匹配微服务的特点。这样就能轻松划分出一个微服务。就是DDD的上下界。

在系统复杂之后。我们都需要使用分治来拆解问题。一般有两种方式,技术维度和业务维度。技术维度类似MVC分层设计。一种就是按照业务领域来划分。
微服务架构强调用业务维度来分治应对系统复杂度。而DDD也同样着重业务视角。
在追求目标达到了统一。

我们将架构设计活动精简为以下三个层面:

  • 业务架构----根据业务需求设计业务模块及其关系
  • 架构系统----设计系统和子系统的模块
  • 技术架构----决定采用的技术和框架

以上三种活动在实际开发中是有先后顺序的。但是不一定谁先谁后。在我们解决常规套路问题时,我们很自然往分层架构套(先确定系统架构),或者用PHP开发(确定技术架构) 在业务不复杂的情况下 没啥毛病。
跳过业务架构设计出来的架构关注点不在业务响应上。可能就是个大泥球。在面临需求迭代或者响应市场变化时就会很痛苦。

DDD的核心诉求就是将业务架构映射到系统架构上,在响应业务变化调整业务架构的时候,也能随时调整系统架构。而微服务追求业务层面的复用。设计出来的系统架构和业务一致。在技术架构上则系统模块之间充分解耦。可以自由地选择合适的技术架构,去中心化地治理技术和数据

DDD与微服务关系映射
在这里插入图片描述
用原来的抽奖来做个简单的例子。用DDD重构完成一个中型的基于微服务架构的系统。来做到高内聚低耦合

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

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

相关文章

动态规划--第N个泰波那契数

本题题目链接备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/n-th-tribonacci-number/ 个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 动态规划&#…

Elasticsearch的批量bulk 提交 写入的方式会有顺序问题吗?

Elasticsearch的分布式特性可能会导致写入操作的执行顺序与提交顺序稍有不同。在分布式环境中,Elasticsearch将数据分散到不同的节点上进行存储和处理,因此写入操作的执行顺序可能会受到网络延迟、负载均衡等因素的影响。 根源在于ES的分布式架构。如上图所示,客户端的命令首…

蓝牙物联网开发与应用:五大核心应用场景!

蓝牙技术在物联网中的五大核心应用场景 1、智能家居 通过蓝牙连接智能家居设备&#xff0c;如智能灯泡、智能插座、智能恒温器等&#xff0c;可以实现远程控制、语音控制等功能&#xff0c;提高家居的智能化程度和便利性。 2、智能穿戴设备 蓝牙技术可以连接智能手表、智能手…

Swagger升级指南:Swagger2与Swagger3注解差异揭秘

在API开发的世界里&#xff0c;Swagger已经成为了一个不可或缺的工具&#xff0c;它让API的文档化和前后端的协作变得前所未有地简单。随着Swagger的进化&#xff0c;我们迎来了Swagger3&#xff0c;也被称为OpenAPI Specification 3.0。本篇博客将带大家深入了解Swagger2和Swa…

美国联邦机动车安全标准-FMVSS

FMVSS标准介绍&#xff1a; FMVSS是美国《联邦机动车安全标准》&#xff0c;由美国运输部下属的国家公路交通安全管理局(简称NHTSA)具体负责制定并实施。是美国联邦政府针对机动车制定的安全标准&#xff0c;旨在提高机动车的安全性能&#xff0c;减少交通事故中的人员伤亡。F…

计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

vcruntime140.dll是一个非常重要的动态链接库文件&#xff0c;它包含了许多运行时的函数和类。然而&#xff0c;有时候我们可能会遇到vcruntime140.dll无法继续执行代码的问题&#xff0c;这会给我们带来很大的困扰。那么&#xff0c;这个问题是什么原因导致的呢&#xff1f;又…

打破枯燥工作日,用Python统计键盘和鼠标点击次数,钉钉告诉你今天摸鱼了多少次!

1 前言 是否曾想过&#xff0c;在一天的工作中&#xff0c;你到底点击了键盘多少次&#xff0c;或者鼠标点击了多少下&#xff1f; 是否好奇每天工作的时候&#xff0c;自己究竟有多努力&#xff1f; 本文将带你使用 Python&#xff0c;利用 pynput 监听键盘和鼠标事件&…

有载分接开关测试仪

产品概述 KDKC-2020变压器有载分接开关测试仪是用于测量和分析电力系统中电力变压器及特种变压器有载分接开关电气性能指标的综合测量仪器。它采用计算机控制&#xff0c;通过特殊设计的测量电路&#xff0c;可实现对有载分接开关的过渡时间、过渡波形、过渡电阻、三相同期性、…

node版本与npm版本不对应的解决方案

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 错误情况 今天遇到了个问题&#xff0c;原来用的node的版本是v14.16.0的&#xff0c;后来升级到了最新版20多的时候&#xff0c;以前的项目启动不了。 于是我手动将node卸载了&#xff0c…

新能源车企年底冲刺KPI,只能抓住“价格战”做文章?

新能源汽车行业的价格战似乎看不到尽头。 自特斯拉吹响号角后&#xff0c;今年以来&#xff0c;业内已然开启了几轮颇具规模的价格战。 如今进入年底&#xff0c;价格战不仅没有消停&#xff0c;还愈打愈烈。据不完全统计&#xff0c;12月&#xff0c;已有20多家车企先后开启…

如何在公网环境下使用Potplayer访问本地群晖webdav中的影视资源

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

C++ Qt开发:TabWidget实现多窗体功能

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TabWidget标签组件的常用方法及灵活运用。 Q…