广州响应式网站建设南京网站开发南京乐识权威

news/2025/9/30 0:34:16/文章来源:
广州响应式网站建设,南京网站开发南京乐识权威,网站微信支付怎么开通,创app开发 杭州app开发公司前言 上一篇#xff1a;从领域驱动到模型驱动中我们讨论到#xff0c;领域驱动设计的核心思想是保持业务-模型-代码的一致性#xff0c;模型作为沟通业务和代码的工具#xff0c;至关重要#xff0c;今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看…前言 上一篇从领域驱动到模型驱动中我们讨论到领域驱动设计的核心思想是保持业务-模型-代码的一致性模型作为沟通业务和代码的工具至关重要今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看到这篇文章的读者都是IT从业人员大家都知道建模是怎么回事但我还是想先对建模这件事讨论几句我理解的建模是对业务中数据流的合适描述。业务是公司的经营活动但是在软件工程范畴中当业务人员找到开发说要开发个系统来管理业务的时候其本质是需要一个能管理业务中数据的系统。因为软件系统唯一能处理的只有数据它不可能做到把货物从A运到B类似的事情但它可以通过把“货物从A运到B”这件事情通过数据的方式传递给合适人去完成。因此我们构建软件系统时唯一关注的是如何处理业务中的数据。业务中的数据具有历史性即其会随着业务的流转而变化衍生出新的数据。将业务全周期中的所有数据视为一个集合不同的业务阶段、业务操作、业务视角都是关注集合中部分数据并筛选出来形成一个子集。例如电商场景中一个完整的订单流程包含用户浏览商品、下单、付款、物流等阶段包含商品名称、用户地址、付款渠道、物流明细等数据。但在不同的业务阶段不同的业务角色只关注部分数据但因为各参与方都使用同一套系统同一套数据因此系统还要关注模型间数据的流转路径。将数据集合进行划分并描述其变化路径这就是建模。 什么算好的建模 模型包含数据和行为。模型本质上是一个集合是为了最大限度满足使用方信息完备要求并且使得系统管理代价最小的平衡结果。这里说得系统管理代价实际上是指数据规模、信息密度超出人脑处理信息上下文的容量后带来的复杂度急剧上升从而无法做出有效、正确决策使得系统和业务的一致性越来越低使软件系统在错误的道路上越走越远。因此建模的评判标准有三个1、和业务保持一致2、信息完备3、管理代价最小。 “和业务保持一致” 这里就是DDD中提倡的“共同语言”创建的模型应该能和业务中的概念术语一一对应不能自己创造、篡改、臆想出一个模型应该是业务流程中确实存在、需要的数据子集。数据的流转应该符合业务实际中的数据变化实际而不能为了技术、性能、方便等理由而强行创建出一条数据流。 “信息完备”是指应该从业务流程出发将上下文需要的数据都在模型中体现。如果某个数据在节点3处使用而它是在节点1出产生的那么它就应该沿着节点1-节点2-节点3的路径流转而不是在节点3处再去节点1中获取。 “管理代价最小”主要指的是系统复杂度要最小复杂度的度量有两个指标模型数量和模型关系且模型关系对复杂度的影响远大于数量。这里说得复杂度仍然是描述开发人员对系统的理解、掌握、改造时要处理的信息大小。为什么说关系对复杂度的影响远大于数量呢 一本新华字典的体量远大于一本红楼梦小说但理解红楼梦的复杂度远大于新华字典。因为字典中收录的汉字都是独立的前后并无强烈关联。但红楼梦中包含的人物、故事纷纭复杂想要读懂甚至修改红楼梦需要大师级的文学素养。因此建模时我们应该着力避免模型间的关系必要时可以用模型的数量来规避关系。 建模方法 由于DDD追求建模和业务的一致性且愿意使用模型的数量来置换关系以追求系统的复杂度降低DDD中常采用的建模方法是CQRSCommand Query Responsibility Segregation命令查询职责分离和命令-事件模型。CQRS将系统的功能分为两类写操作和读查询每个写操作视为一个命令是真正的业务流程只针对写操作建模。而读请求不会对系统造成更改可以直接从数据层取数据组装返回。大部分系统属于写少读多运用CQRS的方式会大大降低建模难度。 命令-事件模型将系统中的写操作分类两部分命令、事件命令由外部触发其携带了上下文数据命令通过执行对系统的状态数据产生了变更由此产生了事件该事件携带了一些数据可能被系统中某些部分关注从而做出反应这些反应通常也会使用执行命令的方式完成由此循环往复把系统中的所有写操作使用命令-事件模型描述清楚。 例如用户选择商品后点击下单对于系统来说用户触发了一个命令该命令包含了用户和商品等上下文数据系统需要执行该命令。通过某个命令执行器将“创建订单”命令执行完毕后系统中将会保存一份订单数据还需要广播一个事件“订单已创建”其将包含已创建订单的关键信息。用户积分管理业务关注“是否有订单创建”这件事通过合适的方式监听到“订单已创建”事件将自己要进行的业务操作也封装成一个命令通过专有的命令执行器处理自己的业务。 为何命令-事件模型适合DDD 命令-事件模型只是一种建模方法其可以脱离DDD使用但因为其具有的几个特点使得其非常适合应用在DDD中。 1、命令-事件模型只针对写操作建模符合CQRS思想。 2、命令-事件的万能句式是xxx操作触发了yyy事件发生yyy事件时做zzz操作。使用这样的句式能将业务流程、内里变化描述得非常清晰而且只需要命令、事件两类模型即可完成建模意味着模型和业务保持一致非常容易。 3、由于建模结果容易理解且具有很强的业务表达能力意味着使用代码描述模型将会非常容易因此更能保证代码和模型的一致性。 4、命令-事件天然具有对应关系而事件到命令可通过命令总线方式隔离、解耦使得系统中模型间关系减少大大降低了系统复杂度。 总结 本篇主要分析DDD中对建模的一些要求建模首先要保证和业务的一致性齐次通过减少关系来降低结果复杂度。CQRS命令-事件模型是目前DDD中的操作性强、适应范围广的符合DDD核心要求的可落地建模方法。这里推荐一个B站视频Java8 到 .NET8 - 掌握这个模型你就能设计一切详细介绍了如何使用命令-事件模型进行建模的细节。

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

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

相关文章

天津网站建设公司推荐学电脑哪家好

性能优化是一个很有趣的探索方向,将耗时耗资源的查询优化下来也是一件很有成就感的事情,但既然编程是一种沟通手段,那每一个数据开发者就都有义务保证写出的代码逻辑清晰,具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …

网站建设案例怎么样做淘宝客网站服务器

目录 1.网络编程 2.Echo模型(服务器与客户端实现通信) 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端,实现代码时候需要实现客户端与服务器端 B/S(Browser/S…

大二学计算机系统基础

大二学计算机系统基础平台:IA-64 + linux + C + gcc在 linux 系统中:gdb 在 Macintosh OS 上:lldb编译器:以机器码为目标 操作系统:管理进程状态x86-64(又称 x64、AMD64) x86 架构的 64 位扩展 指令集的 64位版…

目前哪些企业需要做网站建设的呢w7系统那个网站做的好

我相信命理,但我不相信在床脚钉四个铜钱就可以保证婚姻幸福、白首偕老。 我相信风水,但我不相信挂一个风铃、摆一个鱼缸就可以使人财运亨通、官禄无碍。 我相信人与环境中有一些神秘的对应关系,但我不相信一个人走路时先跨走左脚或右脚就可以…

阿里云模板建站教程网站的种类

常数 值 描述 vbCr Chr(13) 回车符。 vbCrLf Chr(13) & Chr(10) 回车符与换行符。 vbFormFeed Chr(12) 换页符;在 Microsoft Windows 中不适用。 vbLf Chr(10) 换行符。 vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符;适用于…

免费做网站app怎么做页面跳转

参考链接&#xff1a; 反转Java中的字符串String 一、java字符串的反转 1.利用java字符串的拼接实现字符串的反转&#xff0c;代码如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

20250929 之所思 - 人生如梦

20250929 之所思最近事情发生的有点多,思绪有点混乱。9.23 台风来临,9.24 居家办公一天;9.27日因为26日晚没有控制好时间几乎通宵,迷迷糊糊的度过了一天,9.28日又补班,整个节奏很混乱,加上最近休假的同事特别多…

9/29

今日学习了Java中的出题系统,使用了子方法的方法写代码,让我收获颇丰,明日继续

聊城专业建网站价格中国建设银行官网站住房公积金

Redis 作为一个高性能的分布式缓存系统,广泛应用于后端开发中,因此在后端研发面试中,关于 Redis 的问题十分常见。 本文整理了30个常见的 Redis 面试题目,涵盖了 Redis 的源码、数据结构、原理、集群模式等方面的知识,并附上简要的回答,帮助大家更好地准备相关的面试。 …

9.9元包邮网站怎么做昆明做网站的网络公司

首先&#xff0c;先介绍两种引入模块的方法。 法一&#xff1a;将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二&#xff1a;只引入某个文件中一个类/函数/变量 需要从某个文件中引入多个函数或变量时&#xff0c…

河南网站排名优化wordpress 响应速度

文章目录 切片的诞生&#xff1a;数组的延伸切片的结构初始化切片 切片的内存管理扩容机制 实例分析&#xff1a;切片的动态特性切片与性能性能对比 切片的并发安全并发场景下的切片操作 切片与接口切片与空接口 切片的遍历与操作遍历切片切片的切片操作 切片的垃圾回收切片的生…

昆山科技网站建设达州网站建设公司

为了使用你提到的封装方式来创建一个包含多个 Data 对象的列表并使用 DataLoader 来加载这些数据&#xff0c;我们可以按照以下步骤进行&#xff1a; 创建数据&#xff1a;生成节点特征矩阵、边索引矩阵和标签。封装数据&#xff1a;使用 Data 对象将这些数据封装起来。使用 D…

怎么制作学校网站徐州百姓网

防水涂料和施工堵漏的“五大技巧”和“九个细节”很多业主会在留言里问我家里水管堵了、房顶渗水怎么办&#xff0c;所以防水问题不可忽视。让您住的安心&#xff0c;您楼下的邻居也住的安心。对于防水问题&#xff0c;一定要在最初进行装修的时候就特别注意。下面这些是专业人…

如何设计个人网站响应式网站和自适应

前情回顾&#xff1a;i操作并不是原子操作&#xff0c;因此多线程下会达不到预期的效果&#xff0c;需要通过加锁或AtomicInteger或LongAdder等方法来实现。 i可以分为三步 我们通过实验来观察实现i操作的方式。 下面实验中通过继承Thread实现了多线程 错误方法&#xff1a;…

网上工伤做实网站做网站都要掌握什么

文章目录 分布式IDUUIDSnowflake算法数据库自增IDLeaf算法Redis自增ID 分布式ID 在我们业务数据量不大的时候&#xff0c;单库单表完全可以支撑现有业务&#xff0c;数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长&#xff0c;主从同步也扛不住了&#x…

规范12388举报网站建设管理2022年列入传销组织最新骗法

http://www.samsung.com/global/business/semiconductor/mobilesocProductDown.do?userIdtechinfinicores.com转载于:https://www.cnblogs.com/zd_ad/archive/2010/11/16/1878238.html

newDay06

1.今天课程和事比较多,背背单词,随便看了看 2.明天估计也没啥时间,上午两节课,下午直接回家了 3.问题,没啥的

买卖股票当中的最佳时机

买卖股票当中的最佳时机题目 给定一个数组$ prices $,它的第 $i $个元素 \(prices[i]\) 表示一支给定股票第 $i $天的价格。 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法…

Java 与智慧交通枢纽:机场与地铁的数字化管理

一、引言 交通枢纽是现代城市运行的核心节点,承担着人流与物流的高效组织与调度。尤其是 机场与地铁系统,每天需要处理数以万计甚至数十万计的乘客流量,同时保障安全与效率。传统交通枢纽在 运力调度、信息透明度、…