一文一点| 这就是你要了解的DCI 架构 - 腾讯云

文章推薦指數: 80 %
投票人數:10人

我昨天晚上乘坐高铁,看了郑晔老师的极客专栏《软件设计之美》,其中讲面向对象继承的这课的思考题,提到了DCI架构。

这让我隐约想起来,记得《架构整洁之 ... 腾讯云备案控制台云+社区专栏视频精选问答沙龙云+竞赛实验室团队主页开发者手册腾讯云TI平台TVP搜索搜索关闭创作写文章发视频提问登录注册展开腾讯云·社区登录首页专栏视频精选问答沙龙云+竞赛团队主页开发者手册腾讯云TI平台TVP返回腾讯云官网王新栋腾讯云TVP成员55篇文章一文一点|这就是你要了解的DCI架构转到我的清单专栏首页程序架道一文一点|这就是你要了解的DCI架构20分享分享文章到朋友圈分享文章到QQ分享文章到微博复制文章链接到剪贴板海报分享海报分享一文一点|这就是你要了解的DCI架构2020-09-102020-09-1015:31:51阅读1.3K0本文的知识,你可以作为一个了解,如果你对DCI和Qi4j框架的初心感兴趣可以继续。

1、我昨天晚上乘坐高铁,看了郑晔老师的极客专栏《软件设计之美》,其中讲面向对象继承的这课的思考题,提到了DCI架构。

这让我隐约想起来,记得《架构整洁之道》这本书里面也提到过一次,当时是跟六边形架构和BEC架构拿来一起同比介绍,当然《架构整洁之道》这本书里面主要介绍的是六边形架构和clean架构。

为了写这篇文章,我又去翻看了下书中的介绍,”无论哪种架构风格,他们都具有同一个设计目标:按照不同的关注点对软件进行切割“,也就是我们经常说的分离关注点。

当前软件设计中比较流行,或者说知名的四种架构,整洁架构、DCI架构、DDD架构(严格说是一种设计方法)、六边形架构。

这些架构都是分层的架构风格,因为分层可以让各层各负其责,实际上,也是单一职责原则的宏观展现。

2、说了上面这么多,到此也仅仅知道DCI也是一种分层的架构,那么到底什么是DCI架构呢。

所谓DCI架构,就是对象的Data数据、对象使用的Context场景、对象的Interactions交互,Data、Context、Interactions简称DCI。

对于传统的面向对象而言,有数据和行为,如果不是太严格的话,实际可以对应这里的数据和交互,唯独没有场景,或者换个角度来讲传统的面向对象较好的表达了结构,但在表达交互方面欠佳。

大家,可以大胆想一下,如果要能够较好的表现出交互,是不是需要有角色的概念,数据有了,场景有了,行为也有了,谁参与其中呢,唯独缺少角色。

DCI架构就提出了角色Roles的概念,而其中的场景就是角色参与到具体业务活动中的表现。

图自网络RolesDCI架构的核心思想是在描述对象的时候,不再强调类或者POJO,而是强调,对象是由Roles来组合组装行为。

DataDCI架构中的数据就是实体对象中的数据。

ContextContext掌握了在一个交互场景中角色与一个特定对象实例的关系映射。

·Interactions交互是作为场景实现的方法,寻找场景中相关的角色,然后激活调用其领域方法。

3、Spring框架的主要作用就是将行为和数据天然的做了分离,伟大之处就是让不太懂面向对象编程的人,也能够写出规范化的工程代码,不好的地方也显而易见,就是对象过于贫血,反而失去了面向对象的味道。

另外,还有一点,我们大家常常在编程的时候大量使用了继承,特别是在我们进行领域建模的时候,因为大家直觉上就是有个模型我继承就好了。

举个例子,比如我要计算订单参与优惠之后的实际价格,我就写了一个类来继承订单类来干这件事,原因是订单类里面有优惠的算法,那实际上订单和优惠算法完全是描述不同的关注点。

这里,仔细想过之后,肯定是用组合比较好,这也是在Java这门面向对象的语言开发中,有一个经常被我们提及的规则:“组合优先于集成“。

当我们使用组合的时候,被嵌入的自然而然可能就是接口了,可能有的同学会问了,那么有没有把接口嵌入模型中的框架呢,就像spring那样,而同时呢又不像spring那样搞的太贫血。

Qi4j框架就是这样的一种框架,框架被提出的时候,它的口号是:“类已死,接口万岁”。

(注:保持谨慎态度来看待)我从InfoQ网站上找到一段关于它的描述,原文地址https://www.infoq.cn/article/2007/11/qi4j-intro,这篇文章的时间已经比较早,不过我们可以看下它当初提出的初心。

Qi4j带来了面向组合编程的新思想,提出类中不再放有任何的行为,取而代之的是,类成为混入(mixins)的‘组合’,并在类中使用标注定义接口。

Qi4j本身是一个提供给所有java开发者使用的面向组合编程的Java框架。

尽管面向组合编程需要较大的思想转变,但是面向组合编程不需要单独的工具、语言或XML。

Qi4j的应用程序可以在Spring应用软件、Web应用容器、OSGi和其他地方运行。

Qi4j大量使用了标注,以此摆脱框架特定的知识,让开发者更关注业务规则。

该项目的创始人也曾说过如下的内容。

Qi4j是一个以领域为中心的应用开发框架,融入了从面向方面编程、依赖注入和领域驱动设计演化而来的思想。

我需要一个能使领域模型和业务规则再度成为关注焦点、让领域专家和开发者能够清晰沟通的系统。

4、一说到面向对象编程,我们立马会提到封装、集成、多态,其中封装呢,又是面向对象的基础,那么封装的是什么?有的人说是数据、有的人说是行为、其实,在这里可以告诉大家的是,封装最重要的是封装行为,数据是行为产生的数据。

而DCI呢,其实就是特别关注行为的设计方法,这点,大家可以跟设计模式中的行为模式做个参照。

5、在上面我们提到了DCI架构的开源框架QI4J的期望之一就是想要在领域驱动设计方面和让领域专家和开发者之间有清晰的沟通。

那么DCI其实跟DDD是有一定的“心心相惜”的。

那么DCI对我们所了解到的DDD有什么辅助作用么,我们来看一下中兴通讯的架构师张晓龙在ArchSummit深圳2019大会的分享。

首先,DCI助力DDD战术设计:1、显式地对ROLE建模,解决了贫血模型与充血模型之争;2、一个聚合可以支持哪些ROLE,一个ROLE可以由哪些聚合扮演,一个场景下哪些聚合要扮演哪些角色;3、当Aggregate内部实体行为比较多时可以嵌套使用DCI来拆分和组合;其次,DCI助力DDD代码落地:1、对象就是Data,Client为Context,对象在Client中的行为就是ROLE。

2、根据正交设计原则得到小类(素材库),根据多重继承(onlyC++)或依赖注入来组合素材,不管是行为类还是数据类,都按Role的方式来组合,对像仅仅组合Role并注入依赖;3、小类大对象:类作为一种模块化手段,遵循高内聚,低耦合,让软件易于应对变化;对象作为一种领域对象的的直接映射,解决了过多的类带来的可理解性问题,让领域可以指导设计,设计真正反映领域;领域对象需要真正意义上的生命周期管理。

6、说点题外话,对于极客时间和得到或者其它音频类知识,如果能有环境去看,我绝不会去听,你可以试试,看的效果要比听的效果好的多了,因为看是主动式学习,听属于被动式学习。

本文,因为也只是花了今天三小段时间来学习,早上上班前,中午午饭后和晚上回到住处,可能分析的不会那么到位,不过希望也能做个引子吧。

感谢你读到这里,本文完。

学习参考资料https://www.jdon.com/37976精读架构设计之DCIhttps://zhuanlan.zhihu.com/p/27654319DCI架构是什么?https://www.jdon.com/38266使用qi4j实现DCI架构本文分享自微信公众号-程序架道(xindongbook17),作者:程序架道原文出处及转载信息见文内详细说明,如有侵权,请联系[email protected]删除。

原始发表时间:2020-09-07本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

展开阅读全文举报点赞2分享登录后参与评论一文一点|你是如何理解软件架构设计的当谈到软件架构的时候你不能只想到spirng、springmvc、mysql,你也真不应该想到它们,虽然它们是你落地的载体。

王新栋想要成为一个合格的架构师?看这篇文章就足够了......在互联网圈,架构师这个名号的火热程度堪比产品经理,它在产品经理没火之前就已经风生水起。

Java高级架构【图文并茂】一步步带你了解Web站点架构1.1http反向代理服务器 在web站点前端,我们需要搭建一个反向代理服务器,用于负责接受用户的请求,请求包括动态和静态的内容请求。

一般反向代理服务器的部署...小小科从DDDDSLDCI说起软件行业隔一段时间大家就喜欢造一些名词,比如xx化,服务化,动态化,配置化等,你可以头脑风暴下,你可以搞出多少“化”来。

比如最近火的都不是数据化,智能化了,而是...春哥大魔王关于DCI中传输网络的一些探讨前言 关于DCI技术的探索,最近很是热门,尤其是在SDN-WAN被大家重视起来后,关于DCI技术的介绍文章层出不穷。

本文着重对DCI网络中传输网络部分的技术和现...SDNLABDDD领域驱动的三种分层架构来源:https://www.jianshu.com/p/a775836c7e25JAVA日知录走进Android架构,体会架构师的魅力(附架构师必备技术详解)有关android架构方面的知识少之又少,而对与架构的理解有关架构的文章也都是智者见智仁者见仁。

在我身边听到最多的话就是架构=What?、架构=框架、架构=设计...Android技术干货分享TEG海量运维服务背后的秘密TEG为腾讯提供互联网行业全方位的运营解决方案和服务支持,运营着亚洲最大的网络、服务器集群和数据中心,拥有业内领先的基础架构云运营平台、云数据处理平台、互联网海...TEG云端专业号SDDCI简介在业务类型多样及流量需求规模巨大的情况下,DCI(DataCenterInterconnect,数据中心间网络)主要存在如下挑战: ✔大二层的实现要求跨数...SDNLABSDN在DCI、SD-WAN、5G中的应用,引起你的头脑风暴大多数SDN部署在一个数据中心,目前SDN的目的旨在将数据中心SDN拓展到更广泛的网络应用,如DCI、SD-WAN、5G大无线以及CDN等。

? 网络跨越全球,...SDNLAB如果你要建立一个WordPress的网站,你可能需要了解这几点OliDale在WPlift上面发布了一篇文章,详细描述了他如果从现在开始搭建一个WordPress站点的话,会写哪方面的文章。

整篇文章详细的提到了他可能涉及...神无月如果你要建立一个WordPress的网站,你可能需要了解这几点神无月用写文章的方式写程序--“三维度”逻辑编程语言的设计(1)前几个月,看到园子里面一篇介绍逻辑编程语言的文章《逻辑式编程语言极简实现(使用C#)》,觉得作者写得很有趣,用讲故事的方式来讲述了一个极简逻辑编程语言的...用户1177503VXLAN篇之multi-fabric作者简介:张磊,思科原厂8年多technicalconsultingengineer,精通思科数据中心/园区网产品及技术;精通SAN网络架构及产品;熟悉广域...SDNLAB鹅厂如何构建大型基础网络平台笔者用较小的篇幅来讲实现细节,而较多的内容聚焦在鹅厂在做这些工作时候的一些思路和经验,希望能给大家带来一点点参考价值。

鹅厂网事云数据中心网络虚拟化——大二层技术巡礼之NVo3技术DC间隧道NVo3体系框架只是要求隧道构建在IP网络上,并没有要求一定是要端到端的,因此DC间跨越Internet进行互联的一些技术也属于NVo3框架中。

这类技术往往部署...SDNLAB腾讯DCI网络SDNSR-TE方案详解本文从需求背景、实现细节以及未来技术演进等多个方面对腾讯SDN集中控制的SegmentRoutingTE方案做了全方位分享。

鹅厂网事QQ和微信成长的背后:腾讯网络这十年(节摘版)[导读] 也许没有多少人记得2004年发生的事情。

但对于老腾讯来说,10年前的那个日子,2004年6月16日永远难以忘怀。

这一天,QQ诞生5年后的腾讯在香港联...鹅厂网事浅谈显示器色域:从sRGB到广色域近年来,广色域越来越流行,游戏领域的很多新款显示器开始着重推荐DCIP3色域,而设计和摄影领域的高端产品则强调AdobeRGB色域。

我们不禁要发问,广色域真...233333更多文章王新栋腾讯云TVP成员关注专栏文章55阅读量13.2K获赞144作者排名3098腾讯云原生专题云原生技术干货,业务实践落地。

一键订阅《云荐大咖》专栏获取官方推荐精品内容,学技术不迷路!立即查看腾讯云自媒体分享计划入驻云加社区,共享百万资源包。

立即入驻广告关闭社区专栏文章阅读清单互动问答技术沙龙技术快讯团队主页开发者手册腾讯云TI平台活动原创分享计划自媒体分享计划邀请作者入驻自荐上首页在线直播生态合作计划资源技术周刊社区标签开发者实验室关于视频介绍社区规范免责声明联系我们友情链接归档问题归档专栏文章归档快讯文章归档关键词归档开发者手册归档开发者手册Section归档云+社区扫码关注云+社区领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL数据库SSL证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright©2013-2022TencentCloud.AllRightsReserved.腾讯云版权所有京公网安备11010802017518粤B2-20090059-1扫描二维码扫码关注云+社区领取腾讯云代金券



請為這篇文章評分?