图片来源:pexels.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

新人首单 ¥59.9,原价 ¥129

早鸟+口令「jianmo666」立省 ¥40

我是谁?

我是徐昊(八叉),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化服务的实用方法。

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

我的粉丝仍有专属福利:

新人首单 ¥59.9,原价 ¥129

早鸟+口令「jianmo666」立省 ¥40

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

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

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

输入优惠口令 「jianmo666」

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

聊聊领域分析与业务建模相关推荐

  1. 架构师之路(五)如何做好业务建模?

    "我深怕自己本非美玉,故而不敢加以刻苦琢磨,却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为伍." 现实生活中的我们不都是这样吗?明明庸庸碌碌,却又不甘庸碌一生. - 中岛敦(日) ...

  2. 领域驱动设计和业务建模的最佳实现模式

    图片来源:pexels.com 做了这么多年项目,不知道你有没有发现一个有趣的现象:有时候面对同一个问题,当我们对它的定义不同,往往最终解决方案的差异也会非常大. 拿我司之前的一个需求来说,客户要求将 ...

  3. 运用四色建模法进行领域分析

    运用四色建模法进行领域分析 领域建模有很多种方法,对于同样的问题域使用不同的建模手段得到的模型可能也不尽相同.于是我经常听到这样一个问题:怎么才能保证建模的正确性? 这听起来是个合理的质疑,但实际上却 ...

  4. OO系统分析员之路--用例分析系列(4)--业务建模一般步骤和方法[整理重发]

    本篇开始之前先扯点闲话,商业应用系统开发经历了三个阶段: 第一个阶段以计算为中心,分析设计围绕程序的运行效率,算法优劣,存贮优化来进行.90年代的大学课程讲的都是这些. 第二阶段以数据为中心,分析设计 ...

  5. 我们应当怎样做需求分析:业务领域分析

    在需求分析工作中,最后一项分析工作就是业务领域分析啦.业务领域分析,就是对需求分析中涉及到的业务实体,以及它们相互之间关联关系的分析.前面我们谈到了功能角色分析,或者说用例分析,它是从整体的角度对整个 ...

  6. 一个房屋中介业务建模的实例分析

    一位名叫Midhael Yan的朋友给我发来一封信,信中谈到这样一个问题.我觉得很有代表性,因此公开发布到BLOG上.这位朋友的问题是这样的: 一个租房中介准备提供一个网上中介服务系统,主要包括以下服 ...

  7. 2 面向对象建模过程 领域分析

    在进行系统构思之后,我们会进行领域分析领域分析的目的是为了构建与业务对应的模型,领域分析步骤如下 领域类模型 1. 寻找类 根据名称和概念,我们可以初步提取一些类 如:销售不同剧院剧目入场券的预定系统 ...

  8. 从实际业务中来,到落地业务建模中去

    图片来源:pexels.com 做了这么多年项目,不知道你有没有发现一个有趣的现象:有时候面对同一个问题,当我们对它的定义不同,往往最终解决方案的差异也会非常大. 拿我司之前的一个需求来说,客户要求将 ...

  9. 领域驱动设计--业务架构映射为应用架构(五)

    通过<多维度规划业务架构>,我们获得了由业务领域-业务组件-业务服务三个层次组成的业务架构.虽然是架构,但其本质仍然属于问题空间,其目的在于真实地探索问题空间,了解我们要解决什么样的问题. ...

最新文章

  1. Script:Speed Up Large Index Create or Rebuild
  2. python发送短信内容_通过Python发送短信
  3. 左耳朵耗子论微服务 Serverless 及 FaaS | GIAC 访谈
  4. RabbitMQ 队列消息持久化
  5. 2017. 网格游戏
  6. python中如何替换某列特定数值_python 怎么根据两列值,修改对应的某列值,其中一列的为需要修改的列标题...
  7. 如何获取集合里面的下标_集合上下极限公式的理解
  8. jquery 封装ajax方法,关于二次封装jquery ajax办法示例详解
  9. 整理一年中使用到的工具和类库,可能正有你需要的!
  10. STM32自学笔记-8-红外遥控
  11. BeautifulSoup抓取门户网站上的链接
  12. 微信小程序-分享页面到微信群或者好友携带分享者身份信息
  13. 停车场寻车是怎么实现的?车库寻车有什么好办法?
  14. Selenium 页面加载慢(一直转圈)
  15. 程序猿没有副业,太难了(个人经历不喜无视)
  16. 回顾知识点:计算机网络篇
  17. ZZ教你卸载 Office 正版增值计划通知 (KB949810)-CHS
  18. 美光科技:非挥发性存储器及快闪存储器才是归宿
  19. 单目多帧自监督深度估计(2021-2022)研究进展
  20. wps在Ubuntu不能使用中文

热门文章

  1. linux nfs mysql_MySQL实现高可用+共享存储NFS
  2. python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
  3. android AVB2.0(四)libavb库介绍
  4. 什么是堆栈?内存中划分出按FIL0方式操作的特殊区域,叫做堆栈
  5. (计算机组成原理)第三章存储系统-第六节1:高速缓冲存储器Cache及其相关基本概念、程序访问的局部性原理和命中率
  6. Linux Dynamic Shared Library LD Linker
  7. Python 数据全部显示,去掉中间省略号(pandas、...)
  8. Supervisor进程守护监控
  9. FZOJβ #31.字符串
  10. 01_13_JSP编译指令