re:Invent全球大会引领风向重塑未来 了解详情
写点什么

当 DDD 遇上 DCI(Data, Context, Interactive)架构模式

  • 2019 年 8 月 11 日
  • 本文字数:938 字

    阅读完需:约 3 分钟

当 DDD 遇上 DCI(Data, Context, Interactive)架构模式

ArchSummit深圳2019大会上,张晓龙讲师做了《当 DDD 遇上 DCI(Data, Context, Interactive)架构模式》主题演讲,主要内容如下。


演讲简介


DCI 是数据、场景、交互(Data、Context、Interactions)简称,重点是关注数据的不同场景的交互行为,是面向对象系统状态和行为的一种范式设计;DCI 在许多方面是许多过去范式的统一,多年来这些模式已经成为面向对象编程的辅助工具。


问题背景:电信软件的功能复杂特性交叉,对实时性和数据一致性的要求比较高,代码规模比较大,同时处理大量并发活动。


解决方案选型:1.领域建模+贫血模型;2.领域建模+充血模型;3.领域建模+DCI。


方案介绍:选择“领域建模+DCI”,将类和对象看成不同的事物。类作为一种模块化手段,遵循高内聚,低耦合,让软件易于应对变化;将类看做是领域对象拥有的职责或扮演的角色,对象作为一种领域对象的的直接映射,解决了过多的类带来的可理解性问题,让领域可以指导设计,设计真正反映领域。如果使用 C++ 语言来实现的话,可以通过多重继承的方式来完成职责 ROLE 的组合 ;如果使用 Go 语言来实现的话,可以通过依赖注入的方式完成职责 ROLE 的组合。


实施后效果说明:DCI 可以和 DDD 融合在一起,基于职责的组合式设计提高了代码的可理解性和应对变化的能力,而且对于开发人员来说 DCI 带来的收益比 DDD 更大。


演讲提纲


  1. DCI 架构模式

  2. Data,Context,Interaction

  3. 优缺点

  4. DCI 是 DDD 的补充

  5. 类与对象的关系

  6. DCI 与 DDD 的融合

  7. ROLE 的建模

  8. 数据依赖管理

  9. 领域模型各部分的可组合性

  10. 实践案例

  11. 案例介绍

  12. 物理设计

  13. 领域模型设计

  14. 代码实现要点

  15. 小结

  16. DCI 与 DDD 的融合

  17. 审视类与对象的关系

  18. DCI 落地的核心是 ROLE 的建模

  19. 对于开发人员来说 DCI 的收益比 DDD 更大


听众受益点


  1. 理解 DCI 架构模式

  2. 明白 DDD 和 DCI 的关系

  3. 清楚团队基于 DDD 落地 DCI 的方法


讲师介绍


张晓龙


中兴通讯 资深软件架构师


Gomonkey 和 Go 语言 trans-dsl 作者,具有十多年软件架构和开发经验,近年专注 PaaS 和 5G 等大型项目的设计和开发,精通微服务契约测试。爱读书,爱运动,爱编程,爱分享,对于大型软件的重构具有丰富的实战经验。曾指导多个团队积极实践 DDD,包括开发领域和测试领域,取得了比较好的效果。












完整演讲 PPT 下载链接


https://archsummit.infoq.cn/2019/shenzhen/schedule


2019 年 8 月 11 日 00:003343

评论

发布
暂无评论
  • 使用 Axon 框架实现一个 CQRS 示例应用

    命令查询职责分离(CQRS)的思想是将对状态的查询部分与改变状态的部分进行分离。Axon框架是一个基于Java实现的CQRS框架,提供了对大多数重要构建块的实现,以帮助开发者在构建应用程序时使用CQRS架构模式。Dadepo Aderemi最近撰写了一系列博客文章,通过一个小型的CQRS演示应用讲解了CQRS的概念。

  • 探索六边形架构

    分层系统是一种架构风格,它的本质是避免软件的可维护性最大的敌人——耦合的出现。端口和适配器架构风格,也叫做六边形架构,就是这种分层系统的一个示例。lan Cooper在一次演讲中为听众解释了各种架构风格的特性,尤其着重讲解了六边形架构的内容。

  • 融合思想:深入探索 S#arp 架构

    本文,Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。他提供了一个项目模板,使用了领域驱动设计技术,以及对NHibernate、Castle Windsor和SQLite的内建支持。

  • 第一章学习笔记

    软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计

    2020 年 10 月 25 日

  • NUnit Action 特性简化单元测试编写

    NUnit最新版本展示了Action特性,该特性能够编排套件、测试及测试用例上的测试行为。开发人员可以通过在他们的测试项目中应用Action特性封装测试活动,并将其应用于类、接口、方法和程序集,来管理setup(初始化)、teardown(结束清理)和测试端的其他行为。

  • Spring DI 容器:如何分析一个软件的模型?

    理解模型,要知道项目提供了哪些模型,这些模型都提供了怎样的能力。但还有更重要的一步就是,要了解模型设计的来龙去脉。

    2020 年 6 月 3 日

  • Vaughn Vernon 谈论响应式领域驱动设计

    《Implementing Domain-Driven Design》一书的作者Vaughn Vernon最近举办了一个关于使用Scala与Akka(Actor模型的一种实现)结合DDD进行开发的讲座,这种设计方式能够避免在传统的事件驱动或Hexagonal架构中所经常面对的一些架构上的负担。

  • GOTO Berlin: 使用微服务分拆巨型系统

    James Lewis在GOTO Berlin大会上谈论了一种新的系统构建方式,他认为传统的系统构建方式把所有的功能放到一个大的应用程序中,使用一个大的数据库,这样会产生很多问题;相反的,将业务功能完全分离,各自使用自己的数据,每一部分作为一个微服务则能够避免不少问题并带来了很多好处。

  • 唯有套路得人心:谈谈 Java EE 的那些模式

    这些模式,就是我们在搭建全栈架构、设计的工作过程中,不断总结和应用的“套路”。

    2019 年 10 月 7 日

  • Http Servlet 创建 Kotlin 版 Web 应用

    2018 年 8 月 15 日

  • AOP 配置 Schema-based 实现 - <aop:config/>

    2021 年 3 月 11 日

  • 第二周

    依赖倒置是将正常书写的代码关系进行倒置,将以前的从上到下,从外到内的类/接口调用进行倒置,当底层的类逻辑发生变化的时候,不会将变化传递到上层调用类,从而减轻代码维护的复杂性,也减少出错的机率,上层代码也能更方便复用。

    2020 年 11 月 1 日

  • 先做好 DDD 再谈微服务吧,那只是一种部署形式

    想要做好微服务,关键在于服务的划分,而划分服务,最好先学习 DDD。

    2019 年 4 月 5 日

  • 实体服务增加了系统复杂性

    独立软件顾问Tareq Abedrabbo认为,实体服务是一种微服务反模式。主要是因为实体服务形成了浅模块,接口和功能之间的关系比较复杂。

  • 以传统应用示例明确领域驱动设计的用法

    领域驱动设计(DDD)是一种软件构建方法,它强调多角色之间的协作,包括领域专家、开发人员和为满足业务目标而涉及到的其他角色,Naresh Bhatia以Bullsfirst为例解释了DDD基础概念的引进,这个例子取自财务传统领域中一个具有中等复杂度的系统。

  • 开篇词|为什么你需要学习业务建模?

    业务建模首先是一个定义问题的方法,其次才是解决问题的方法。通过定义问题,甚至可以把解决方案的复杂度直接降低几个数量级。

    2021 年 6 月 23 日

  • 领域驱动设计和实践

    本文主要介绍了领域驱动设计的基本概念、要素、特点,对比了事务脚本和领域模型的特点,最后介绍了我们在软件开发过程中的领域驱动设计实践。

发现更多内容

程序员的晚餐 | 5 月 13 日 果木鸡丁的夏天

清远

美食

线程通信知识点扫盲!

Simon郎

Java 后端 多线程

选择适合自己的 OLAP 引擎

程序员小陶

大数据 开源 OLAP

回“疫”录(16):管控更加严格了

小天同学

疫情 回忆录 现实纪录 纪实

谈谈控制感(3):让孩子更好地成长

史方远

心理学 控制感 教育

物联网技术栈之网关技术

老任物联网杂谈

物联网网关

由纪念日想到杨德昌

Elizen

随笔 电影

一文读懂阿里云通信的产品体系、技术架构与智能化应用场景实践

阿里云Edge Plus

人工智能 云通信 短信 语音 智能联络中心

定在下午面试的那位候选人,说他不来了

无箭的丘比特

团队管理 面试 简历优化 招聘

Tomcat安全配置

wong

Tomccat security

Java 真实笔试题2

旭霁

Java

什么是工作

史方远

随想 工作

全球经济动荡下,超流币逆袭而来!

极客编

ZigBee3.0 节点入网流程分析

taox

网络协议

AtomicStampedReference是怎样解决CAS的ABA问题

捉虫大师

Java

我肝了一个月,给你写出了这本Java开发手册。

cxuan

Java25周年

产品不需要刻意强调创新

薛梁Lucien

产品 创新突破 PCon

《后浪》程序员版,献给新一代程序员的演讲,何冰《后浪》模仿秀

陆陆通通

Java 编程 程序员 后浪 何冰

全面解读信创行业 关注国产操作系统

统小信uos

操作系统

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP

编程道与术

Java 编程 软件测试 TDD 单元测试

这种场景你还写ifelse你跟孩子坐一桌去吧

小傅哥

小傅哥 drools ifelse 复杂代码优化 规则引擎使用

程序员的晚餐 | 5 月 10 日 能让你流泪的不只是洋葱

清远

美食

如何快速更改qcow2镜像文件

奔跑的菜鸟

云计算

Android10版本引发的生产故障及安全知识归纳

大刘

android https TLS 加解密

程序员的晚餐 | 5 月 14 日 虎皮青椒

清远

美食

怀念小时候吗?

安静的下雪天

个人感想

手把手带你体验 HTTP/3

清远

程序员的晚餐 | 5 月 11 日 久违的大蒜的味道

清远

美食

回顾经典,Netflix的推荐系统架构

王喆

人工智能 学习 推荐系统 netflix

我为什么要开启InfoQ写作

Nick

ThreadLocal到底会不会内存泄漏?实战直接告诉你答案!

刘超

Java 多线程 ThreadLocal

作为下一代云计算基础设施,虚拟化技术如何提高信息管理效率?

作为下一代云计算基础设施,虚拟化技术如何提高信息管理效率?

当 DDD 遇上 DCI(Data, Context, Interactive)架构模式-InfoQ