图片来源:pexels.com

做了这么多年项目,不知道你有没有发现一个有趣的现象:有时候面对同一个问题,当我们对它的定义不同,往往最终解决方案的差异也会非常大。

拿我司之前的一个需求来说,客户要求将一份带有大量文字介绍的图片报告转换成 PDF 格式,以方便用户下载。但由于每张图片具体说明信息不同,所以难免会出现一些排版格式的错误。

于是,我们项目组的一位技术骨干提出了一个看似“完美”的解决方案:

利用后台渲染技术,在服务器端的浏览器进程中渲染页面,再将渲染好的页面通过浏览器后台进程转存为 PDF 文档,并通过云端的大规模存储服务缓存;

另外,为了应对突发巨量下载的可能性,还得用上当时最先进的云计算,构造一组后台渲染集群,并根据下载量的大小,利用云计算的弹性动态调整集群的大小。

可以看出,他是这样定义该问题的:PDF 中保留的信息样式,要和用户在浏览器中看到的一致

方法是没错,但貌似看起来过于复杂?现在我们换个思路,解决这个问题前,先搞清楚客户为什么想保留图片的文字说明?一问才知道,图片上的是版权信息声明,保留是为了避免法务纠纷。

这时候,该问题的定义自然变成了:PDF 中确实要保留图片的版权信息,但读者只用知道其存在,并不一定要直接阅读它。

从这个定义出发,最终的解决方案就简单多了:当图片说明文字超过一定字数,直接选择一个很小的字号,以保证信息留存在 PDF 中即可。实现方案,也就只是一条 if 语句的事儿。

从一个后台渲染集群到一条 if 语句,两者的成本和实施难度的差距不用我多说。看到没,这就是有效定义问题的重要性。

而要想做到有效定义问题,首先得从业务实际出发,并尽力在业务中寻找简化问题的可能性,然后在技术中寻找对应的解决方案。这个过程,也叫做业务建模。

在上述例子中,我甚至还没有动用任何建模手段,只靠澄清了真正诉求,就极大地简化了解决方案。但在日常开发里,各个因素都可能极大提高问题的复杂度,所以除了清晰地理解业务诉求之外,更加需要我们通过建模的方式对这种复杂度进行简化与精炼。

作为业务建模的践行者和创新者,我发现平时不少人都有没搞清问题定义而去舍近求远做事情的困扰,所以,我和极客时间合作推出了《如何落地业务建模》专栏。在专栏中,我会系统讲解建模所掌握的多种方法、原则,以云时代时间轴为界,带你清晰定义业务问题,掌握在架构下,业务建模的最佳实践以及实现模式。

跟我学完这门课,相信你能快速重构建模技能,掌握业务建模精髓和切实有效的落地方法论。无论是作为帮你高效搞定项目的方法,还是一种思维的训练法,业务建模都非常值得你花时间去琢磨。

早鸟 + 秒杀口令「jianmo666」
立省 ¥40,到手仅 ¥89

我是谁?

我是徐昊(八叉),ThoughtWorks 全球技术策略顾问、中国区首席技术官(CTO),ThoughtWorks 技术雷达编撰人。谈话节目「八叉说」作者。

同时我也是北京 Java 用户组( BJUG:Beijing Java User Group)和 Agile China 主要创始人之一。从 2003 年起开始实践极限编程等敏捷方法,并多次以敏捷教练的角色帮助国内外多个团队实施极限编程,提高编码迭代效率。

此外,我也曾主持 ThoughtWorks 中国区技术特种兵小巨人管培计划,为行业输送了多位技术带头人。近年提炼了大规模工程实践方法 SEELE ,以进一步提升研发团队的工作效能。

如何学习业务建模?

业务建模的方法有很多种,它的吊诡之处就在于,使用的难度并不在于建模本身。无论是哪种建模方法,你总能按照书里教程中的例子,照猫画虎地做个七七八八。

但,业务建模存在两个真正的难点:

  1. 清晰地定义业务问题,并让所有干系人都接受你对业务问题的定义;

  2. 在特定架构的约束下,将模型实现出来。

为了帮你搞定这两点,以及更好地了解和掌握建模的最终落地,我在每一讲内容中,都按照步骤展示了很多领域模型,方便大家在阅读中能够清晰梳理整体脉络,同时也可以保存下来,随时查看复习。

下面这个就运用了四色建模法,以一个极客时间的专栏生产和售卖为例,按照关键数据项间的关联,将模型连载一起,稍加润色,补充描述对象,从而得到了如下的领域模型:

回归主题,课程分为两大板块:

一、旧约:“前云时代”的领域驱动设计

这部分是过去十五年“前云时代”,我们对领域驱动设计应用的总结与提炼,因而称为“旧约”。

首先,我会为你介绍领域驱动设计方法。作为一种建模方法,虽不是那么出色,然而却能够在如何引领需求发掘,如何建立沟通反馈,如何与业务方共建模型等问题上,提供到一套出色的框架

而后,我会为你介绍在多层架构成为主流架构选择的时代中,领域驱动设计在模型实现上遇到了哪些挑战,以及如何应对,帮助我们理解架构约束会对模型带来何种影响。

最后我会介绍四种建模方法,分别是:催化剂法、角色-目标-实体法、事件风暴与四色法,以弥补领域设计在建模能力上的缺陷

二、新约:“云时代”的业务建模

如今,云时代彻底改变了我们构造软件的方式,微服务、中台、软件的 SaaS 化都是这一影响的体现。新的架构约束会极大影响我们业务建模的方法,但同时也大大扩展了业务建模的内涵。

我会来和你聊聊云到底带来了哪些观念上的改变,它具体的颠覆性体现在什么地方,以及对我们构造业务系统有多少影响。

其次,我会介绍一种由我发明的业务建模方法 8X Flow 法,用于解决微服务、分布式事务为主导的架构风格中的业务建模问题。这个方法同样可以用于构建中台系统,也是我司目前用于中台建模的主要方法。

最后,我会介绍另一个同样是我发明的用于 SaaS 化业务建模的方法:魔球服务建模法(Money Ball Offering Modeling)一种从运营角度出发构造SaaS化服务的实用方法。

还有很多具体内容,可以看看课程目录。

我的粉丝仍有专属福利:

早鸟 + 秒杀口令「jianmo666」
立省 ¥40,到手仅 ¥89!

订阅后生成海报发给好友,

每成功邀请 1 位好友,可得 ¥20 返现。

???? 点击「阅读原文」

输入优惠口令 「jianmo666」

立省 ¥40 入手,仅限 前 50 人

领域驱动设计和业务建模的最佳实现模式相关推荐

  1. 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则

    dotNET兄弟会 专注.Net开源技术及跨平台开发!致力于构建完善的.Net开放技术文库!为.Net爱好者提供学习交流家园! 公众号 围绕DDD和ABP Framework两个核心技术,后面还会陆续 ...

  2. 领域驱动设计--领域驱动设计到数据建模实践(十)

    ----- 学习笔记 ----- 过去,系统的软件设计是以数据库设计为核心,当需求确定下来以后,团队首先开始进行数据库设计.因为数据库是各个模块唯一的接口,当整个团队将数据库设计确定下来以后,就可以按 ...

  3. Re:从零开始的领域驱动设计

    前言 认识领域驱动设计的意义 模式 smart ui是个反模式 模式 Entity与Value Object 模式 Repository 模式 聚合和聚合根 模式 包结构 其他模式 微服务之于领域驱动 ...

  4. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种软件设计的思考方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践和经验技 ...

  5. DDD专家张逸:《解构领域驱动设计》前言

    张逸 读完需要 5 分钟 速读仅需 2 分钟 述说撰写<解构领域驱动设计>一书的心路历程,三年磨一剑的认真态度与艰辛苦楚,如今写作完毕,也算是苦尽甘来.本书将由人民邮电出版社异步图书社区出 ...

  6. 三年磨一剑,领域驱动设计布道师出版了《解构领域驱动设计》

    解构领域驱动设计 作者:张逸 本书全面阐释了领域驱动设计(domain-driven design,DDD)的知识体系,内容覆盖领域驱动设计的主要模式与主流方法,并在此基础上提出"领域驱动设 ...

  7. DDD 领域驱动设计-如何 DDD?

    注:科比今天要退役了,我是 60 亿分之一,满腹怀念-??? 前几天看了园友的一篇文章<我眼中的领域驱动设计>,文中有段话直击痛点:有人误认为项目架构中加入 Repository,Doma ...

  8. 领域驱动设计(DDD)的精髓

    边界是核心 无论是从宏观到微观再到纳米层次,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的划分与控制. 从分析需求一开始,我们就需要通过确定项目的愿景与目标,划定问题空间, ...

  9. 领域驱动设计 pdf_什么是领域驱动设计?

    什么是领域驱动设计? 你可能使用领域驱动设计(DDD)开发了一些项目.你可能很满意, 使用领域模型来开发领域业务.并且得意地展示给你的同事看,他们会说"666". 但有的时候你使用 ...

最新文章

  1. android webview 加载本地pdf,android – 在WebView中打开PDF
  2. 比特币现金(BCH)独立日一周年庆!里程碑一览!
  3. 解决vue中对象属性改变视图不更新的问题
  4. php-fpm进程数优化方法
  5. 高通被欧盟指控垄断 或将面临高达25亿美元罚款
  6. android权限申请方法,安卓开发Android6+权限申请管理用户拒绝权限一键解决方案...
  7. 字节面试官:javaword转pdf乱码
  8. 位平面提取 matlab,哪位高手知道图像位平面移位在Matlab中如何实现吗?[图像图形(图象)论坛]...
  9. Apache mod_rewrite规则重写的标志一览
  10. 全文搜索引擎 Elasticsearch 入门概念
  11. Group by的使用方法
  12. 怎么在ASP.NET中引用JS文件
  13. html文件一打开就未响应,我的电脑里的文件一右击就未响应是什么状况 求解决...
  14. js 实现单击、双击事件
  15. 小程序手写板电子签名
  16. excel宏选中单元格_从单元格引用运行Excel宏
  17. 电脑重装系统时找不到硬盘怎么办
  18. 系统短信验证码实现案例
  19. ESP32 天气预报 彩屏
  20. 微信小程序实现一个简单的倒计时效果

热门文章

  1. excel vb ppap_vb是什么平台-常见问题
  2. python 怎么将数组转为列表_Python怎么将文件读入列表?
  3. scp拷贝文件夹到另一个服务器目录中
  4. C语言获取某个分割符之前的内容
  5. 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现
  6. python copy()和deepcopy()解释(import copy)
  7. Windows编程—BroadcastSystemMessage函数详解
  8. php中的Register Globals
  9. back(返回)键总结
  10. a标签在ie6和ie7下面换行显示问题解析