专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

企微助手DDD模式探索

  一、前言
  DDD这个大家耳熟能详的名词,近些年来越来越出现在开发的视线中,随着功能的不停迭代,功能不停的累加,代码的堆砌,随之带来的功能复杂度提高,代码的维护和再开发的成本不断增加,正好借着这次WOS系统的升级改造,企微助手完成了对代码DDD架构的升级。
  企微助手没有100完全照搬DDD的落地实现方式,重点对业务本质进行了建模,明确了业务与技术之间的统一语言,培养优秀的技术业务专家,沉淀业务白皮书,定义后续业务研发设计标准,明确产研间沟通标准,提升研发效能。而对于DDD中一些较为抽象与复杂的落地,进行了大幅度的精简,保证代码简单与高效。下面我们简单的介绍一下我们的做法。
  二、DDD是什么2。1简介
  全称叫:DomainDrivenDesign,中文名称叫:领域驱动设计。是一种解决复杂问题的软件开发方式。2。2基础知识
  首先在正式使用DDD前,我们需要对DDD的以下知识有一个基础的认知。
  2。2。1领域与子域
  DDD的核心就是领域模型,而领域就是对业务范围的划分,用来限定业务的边界,在这个范围内的业务问题的处理集合就是领域。
  同时领域是一个业务的范围,那么这个范围就可大可小,那么一个大的领域就可以被划分为多个小的子域,同时子域按照需要还可以拆分为多个更小的子域。这就是DDD领域划分的一个重要思想,通过分治将复杂问题简单化。
  其中子域也有核心子域、支撑子域和通用子域,顾名思义,这些不同的名词用来区分子域的不同作用。2。2。2限界上下文
  提到限界上下文,就不得不先介绍通用语言,通用语言存在于DDD的整个设计过程,通过与限界上下文的协同,来保证对象在边界内的唯一含义,通过通用语言我们可以将业务模型与系统模型映射起来。
  那么限界上下文的作用就是限界(具体的领域边界)与上下文(提供业务所在的上下文环境),在这个环境中内可以使用通用语言进行交流,保证环境内的一切术语与对象没有二意性。
  举个例子,一件商品,在销售的时候,它就是一个商品,在卖出后运输过程中,它就是一件货物,由此可见在不同的业务边界内,通用语言就有了不同的含义,但是再加上了这个界限(销售运输)后他的语意就是统一的。2。2。3实体与值对象
  实体与值对象是构成领域模型的最基础的对象,但是两者又有一定的区别。实体是一个具有唯一标识(ID)的对象,只要唯一ID不变,无论属性怎么变化,它都是同一实体。值对象是通过属性值来识别的对象,它是一个关联属性的集合,并且没有唯一标识。
  举个例子,在用户域中,用户对象,是一个实体,因为不同的id代表不同的用户,然后用户有地址(省、市、区、具体地址)相关的属性,那这个地址就是值对象,因为不同的地址只有值不一样才能表示不同对象。2。2。4聚合
  聚合其实就是由一些在业务上紧密相连的实体与值对象组合而成的,同时为了保证聚合内的数据操作都遵照聚合内的业务规则执行,聚合对数据的修改必须由聚合根统一组织。那什么是聚合根呢?聚合根是这个业务聚合内所有的所有实体与值对象的管理者。负责在聚合内协调实体和值对象,以统一的业务规则操作数据。
  各个聚合之间以聚合根ID互相关联,应用服务在需要多个聚合之间协同的时候,通过聚合根ID作为参数进行跨领域的服务调用。
  所以我们在领域建模过程中一般的顺序:找到聚合根建立聚合划分限界上下文建立领域模型。这里还不是很清晰,下面的实战我们会有更清晰的认知。2。2。5仓储模式与工厂模式
  这两个就比较简单了,是为了配合聚合而产生的设计模式,为了聚合数据的初始化与持久化。
  仓储模式顾名思义就是将各类DB的操作与业务实现逻辑进行隔离,是聚合与数据之间薄薄的一层,使得聚合可以聚焦于业务的处理。
  工厂模式的存在是为了隐藏复杂对象的创建逻辑,从而将领域内对象(尤其是聚合根)的使用与创建进行分离,使得聚合根专注于领域模型,更加清晰。2。2。6实战
  本文就以企微获客服务裂变活动为切入点,展示整个设计过程。
  第一步、事件风暴首先我们需要召集所有的参与人员,通过头脑风暴把领域事件(业务行为)都贴到墙上(使用不同的贴纸)。对于新的业务可以参考以下思路:
  事件风暴思路
  因为我们是重构WOS,业务已经非常清晰了,所以可以直接确定业务的所有事件:
  领域事件集合
  第二步、场景分析通过用例与场景分析,探索出典型场景:
  裂变场景分析
  第二步、领域建模
  聚合过程
  从图中我们可以发现客户与奖品在不同的领域内的表示不同,因为在不同的限界上下文内对象含义不同,比方说客户在客户域中就是聚合根是最基础的所有数据的聚合,但是在活动域中只是一份数据的拷贝,所以只是一个值对象。
  通过对各个业务的讨论,最终我们通过一次次的分析,确定了限界上下文的同时也确定整个领域中各个子域的实体与能力,划分清楚了所以的领域,然后再次进行整合(比方说客户通用域,就是在各个子域的分析后完善了领域的最终能力)。
  最后我们就可以确定整体业务限界上下文了
  企微领域图2。3进阶使用
  通过上面的一些理念我们已经实现了高内聚的设计,那么如何做好低耦合呢,就需要接下来的一些设计方式。2。3。1领域事件
  通过领域事件我们可以将领域进行解耦,可以通过消息的发布订阅方式来实现。
  随之而来,带来了一个问题,就是如何保障多个聚合数据的一致性问题。具体的实现方案需要具体考虑业务,至于是保障最终一致性还是通过事务来保障强一致性,不同的业务有不同的选择。
  企微助手舍弃了领域事件通过消息的发布订阅方式实现,通过在domainservice(领域服务)层定义核心领域业务能力的方式,由service(业务)层进行领域服务的编排,进行了简化处理。2。3。2六边形架构
  六边形结构
  在六边形架构中我们可以看到一个重要的概念就是适配器,将所有与外部系统的交互通过适配器进行隔离。2。4架构思路(参考)
  参考以上的理念我们对原有结构进行了一次升级,根据自身需要我们制定了以下架构。
  系统架构图2。3。4总结
  DDD的存在是为了使用统一的通用语言,消除开发间的沟通障碍,使得领域专家、设计人员、开发间业务沟通更加高效,同时消除业务壁垒。
  DDD设计出来的微服务,业务与应用边界十分清晰,同时也符合高内聚,低耦合的设计原理。
  DDD的部分实现比较复杂,概念较多,建议落地实现进行简化处理,重点关注业务模型的建设,限界上下文的梳理,业务边界的定义以及统一语言的形成。三、过程中产生的问题与思考
  1。关于什么时候需要走领域,什么时候可以应用层直接调用仓储?
  通过领域是为了使用统一的操作,来解决复杂的操作问题,所以在规定的限界上下文内,所有对数据的操作都应该由领域来操作,但是由于查询的多样化,以及查询的效率,再结合人员对DDD的理解成本,为了统一开发习惯,对数据的操作必须通过领域才能调用仓储,而查询可以直接通过应用调用仓储。
  2。确定领域后如何划分微服务?
  最暴力的划分方式就是一个领域就是一个微服务,但是也要考虑到成本以及效率的问题,可以将特别复杂并且高频的业务单独设计微服务,同时结合功能模块的划分,将一些关联性强且使用频率不那么高的业务整合为一个微服务。
  3。关于应用服务与领域服务能力的区分?
  应用服务:在领域服务之上,处于接口层与领域层中间,主要负责协调多个领域完成服务的组合与编排。领域服务:主要实现限界上下文内,实现单一服务的核心逻辑。
  4。任务编排与消息通知何时使用?
  对强依赖的业务走任务编排,比如订单依赖支付结果。对一些弱耦合的业务关系可以走消息,比如支付后的积分发送。
  作者:孙韩越
  来源:微信公众号:微盟技术中心
  出处:https:mp。weixin。qq。comsmXUqYjnWBieRBkM5JSUCaw

人老了,尽量和老伴保持一定的距离,过来人告诉我们为什么前言进入老年状态之后,我们一定要知道有些事情可以做,有些事情是不可以做的,朋友之间和老伴之间我们都需要适当的保持一定的距离,只有这样才能够让我们的生活更加有意义,如果总是保持的那么致二十岁年轻人的一封信写在前面几天前我收到一位来自大二学生的私信,她和我说了学习的困难和原生家庭的困扰。周围人都在考研,但她因为家里条件不好,负担不起研究生学费,所以一直在考研和找工作间犹豫。关于工作,抄书打卡第六十八天今日读完自洽在不确定的日子向内看,后三章讲到了沟通职业以及自我的提升,发觉自己属于取悦型人格或者也可以称为时迎合型人格,一直以来都认为自己可以吃苦耐劳,同时暗暗窃喜着自己的这种吃苦你每天都有哪些突如其来的感悟?你每天都有哪些突如其来的感悟?导语昨天刚上班,就收到一个朋友的私信。她说我每天都有很多意想不到的感悟,特别是一些感悟,都是一些莫名其妙的道理,很想说一句原来你每天都会有那么多意想不爱得太深,也会受伤一位深爱着他的男孩却不知怎么办!我是深情的L,这篇文章来自于(难相遇)每天每夜,对你真情相伴,可心真的很累,追求你五年,在一起了,真的非常开心,但是在一起后却很是忧虑。面对你和别人第五届进博会参展国别范围更广如何看待进博会朋友圈的变化?第五届中国国际进口博览会将于11月5日在上海举行,目前各项筹备工作基本就绪。主办方按照越办越好的总要求,在确保防疫安全的前提下,在交通出行参展服务等方面努力提供一流的城市环境和一流千年古方补髓丹,简单四味药,补肾生精益髓,强腰壮筋骨很多人没多大就出现后腰酸痛,双腿发酸发软的症状,有的还会尿频,尿急,排尿增多,到了晚上睡不着,梦多,甚至白天上班也精神萎靡,整天坐在办公室,回家就瘫在床上不想动,总之时间久了整个人一个百年古方5味药,补肾强身,让你肾气凌人,精足气充神旺大家好,我是沈医生,今天给大家介绍一个古方,只有简单5味药,却可补肾强身,固精生髓,让我们肾气凌人,腰强腿好,精气神充足!很多人年纪轻轻的都已经开始出现肾虚的症状了,总是后腰酸痛,进入女性体内,没有成功受精的精子,都怎样了?人们常挂在嘴上的一句话,就是别让孩子输在起跑线上,可是从生命的起源看,每个人一出生就都是大赢家,因为我们的出生是经过了艰苦卓绝的斗争,成功打败数亿个竞争对手,才从其中脱颖而出。人的未老先衰,阴阳两虚,一个千年古方,补肾生精阴阳双补现在很多人啊,年纪轻轻的就已经长白头发了,还时常健忘,精神疲惫,精力不足,总脱发掉发,后腰一侧或者两侧酸疼,浑身上下都提不起来力气,一回家就想往床上躺着,牙齿松动,眼睛干涩,总之好用好这方汤,祛除体内的痰和火,赶走心烦恶心失眠大家有没有这样的经历?有那么一段时间总感觉莫名的心烦,胸口好似有一团火在燃烧。喝再多的水,好像也浇不灭,时常坐立不安,心烦意乱。前段时间就有一个患者,刘女士,她今年59岁。退休在家
36岁沐川李强一身傲骨活得连猪狗不如,一生善良躲不过人间疾苦36岁的李强7月21日发了一条动态,配文如下可怜自己一身傲骨,却活得连猪狗都不如。可怜自己一生善良,终究没有躲过人间疾苦。在这一无所有的年纪,竟然,连快乐都给不了自己。01一身傲骨声动中国致敬高温下的坚守随着三伏天的到来全国多地迎来持续高温天气炎炎烈日下仍然有不少劳动者坚守在工作岗位上他们保障了生产有序运转守护着群众健康安全声音感动中国央广网声动中国栏目今天推出第2期声动中国致敬高欧盟禁运将影响自俄罗斯原油进口171万桶进口依存度75以上荷兰和波兰为主的欧洲国家,独联体国家分别为160万桶日40万桶日左右,分别占27和6。2021年欧洲原油凝析油产量仅为365。99万桶日,进口量达到960万桶天,近年来进口依存度一孽缘沐川警察杀人案,愚蠢的人疯了后彻底不按照常理出牌了沐川,一个很多四川人都不知道的小县城,位于四川盆地西南边缘,乐山市东南部,距离乐山市区100公里,发生的大事情在这个县城引发了震动,同时在这个炎热得反常的夏天,也引发了全国人民的注四川枪案嫌犯已在逃超3天搜捕区域群山连绵地形复杂,搜捕难度大7月27日,四川乐山沐川县公安局通报称,26日14时许,沐川县发生了一起持枪击伤2人持械杀害3人后逃逸的重大刑事案件,李某有重大作案嫌疑。7月29日,天目新闻记者从沐川县有关部门了液压阀会有哪些问题?48页PPT介绍常见的故障和排除,值得保存液压阀常见故障和排除方法介绍液压控制阀属液压系统的控制调节元件,用于控制液压系统的液流方向压力和流量。借助这些阀,可对执行元件的启动停止运动方向速度动作顺序克服负载的能力等进行控制再忆96台海危机美国众议院议员佩洛西近期有窜访台湾的可能,美国里根号航母战斗群开进南海为其助威壮胆,我国海军052D054A抵近射程范围实时监控,同时驻闽部队宣布对平潭部分海域进行封锁并开展实弹演新式折叠凳一出,随身携带,想坐就坐,拍照给大家看看随着经济水平的提高,人们的生活质量有了很大的改善,压力也变得越来越大。每天早出晚归,为了生活奔波,不过是为了碎银几两,正是这碎银几两,能解万丈惆怅。不仅生活压力大,工作压力也很大,唐山事件50天河北省新公安厅厅长上任距离上个月唐山打人事件已经过去了50天,就在7月28日河北省人民代表大会常务委员会发布决定任命人员名单,经河北省第十三届人民代表大会常务委员会第三十二次会议通过,决定任命董晓宇为河各行各业的钱越来越难挣,钱去了哪里?今天终于有了答案各行各业的钱越来越难挣,钱去了哪里?今天终于有了答案!最近两年,无论是朋友聚会还是网友们都在讨论,不论你是什么行业,公务员私企员工个体户还是建筑工人等等,钱是越来越难挣了,生意是越给钱就能看?这款社交App太野了Askmeanything!欢迎向我匿名提问!只要刷过朋友圈的人,应该都不会对这句话感到陌生。这是Tape软件匿名提问箱的默认分享话术,将编辑好的问题直接分享到朋友圈微博或是QQ空
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网