如何落地业务建模
徐昊
Thoughtworks 中国区 CTO
24830 人已学习
新⼈⾸单¥68
登录后,你可以任选2讲全文学习
课程目录
已完结/共 32 讲
如何落地业务建模
15
15
1.0x
00:00/00:00
登录|注册

说点题外话02|模式并不是解决方案

解决方案:通过接口表示状态,然后将不同状态下的行为封装到不同的对象中
问题:某个类的行为随着它内部状态的改变而改变
解决方案:通过接口表示算法,然后将不同的算法封装到不同的对象中
问题:对于某个类,需要施加不同的算法以完成不同的功能
第4-6节所讲的模式,它们各自对应的问题和解决方案分别是什么?
状态模式
策略模式
问题先行
同样的解决方案可能会对应着不同的问题
模式至少包含两个部分:问题和解决方案
思考题
举例
问题与解决方案
徐八叉:模式并不是解决方案
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是徐昊。今天我们再来专门说点题外话。
说点题外话系列,是我根据评论区的留言,以及不少读者直接给到编辑的反馈中,挑选出来一些值得回答,但又不好直接回答的问题,然后呢,我会讲讲这些问题背后对应的原则。希望你可以感受到我强烈的暗示,在学完之后,不仅要思考,还要主动去寻找一下答案。
除此之外,我也希望给平淡的连载生活带来一定的现场感。比如今天这篇文章是周四零点推送,那么编辑小姐姐会在周三中午 12 点截止反馈收集。然后呢,我会从中挑选要写的话题,从下午两点开始写,然后录音。这样或多或少可以为专栏课程带来一些不可预知的可能性(比如编辑小姐姐一整个下午都在担心专栏是不是会断更,以及一整个下午,都保持着随时待命的状态)。
言归正传,今天我要讲一讲模式(Pattern)。自从 GoF(Gang of Four)在 1994 年发布设计模式(Design Pattern)以来,模式就成了获得可重用的对象模型的重要手段,而模式语言(Design Language),也成了我们描述架构和解决方案的重要手段。
我知道我们这个专栏的读者都有比较长的工作年限,也有比较丰富的工作经验,想来对于模式,你肯定是不陌生的。那么我先问一下,如下图所示是什么模式:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

徐昊在本文中讨论了设计模式的使用和判断。他指出模式并非解决方案,而是问题和解决方案的结合体。他以策略模式、适配器模式、状态模式、备忘录模式和装饰器模式为例,说明了同一种结构可能对应多种模式,强调了判断模式需要回到问题的定义。他警示读者不要贸然从解决方案推断问题,而应理解问题后再结合解决方案判断模式。文章强调了模式与建模都是问题先行,提倡通过重构获得模式。最后,他提出了思考题,鼓励读者分享自己的思考和想法。 文章突出了设计模式的重要性,强调了问题先行的原则,以及判断模式需要结合问题和解决方案的观点。徐昊的观点深入浅出,引人深思。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《如何落地业务建模》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 码农戏码
    置顶
    貌似开了点窍,总结一下,有把锤子哪里都是钉子,有了一套解决方案什么问题都能套得上,但不是每个问题都是同一个问题 由具体问题抽象出解决方案,再在解决方案指导下给出处理具体问题具体路径 问题N:N模式 转化为 问题N:1 解决方案 1:N具体模式 这是N:N的关系,必然从一边是推导不出另一边的 文中的每个问题抽象出是要可扩展,解决方案是面向接口编程,但每个问题都不同,所以具体行为也不同,策略模式是应对行为,状态模式是应对状态 解决方案是一个,可问题却各自具象,魔鬼在细节 能力供应商模式也是同样的,从表面看是接口定义在domain,实现在其它地方,保证domain的稳定,形式上跟很多相似,ACL、整洁架构,也就是解决方案相似,但其实解决的具体问题不同,所以不能说能力供应商就是ACL 很多时候程序员不是在编写代码,而是在摸索业务领域知识;也就是从当前的代码去推测当时在解决什么问题,再重新定义问题,进行重构,这是因为知识没有有效传承,或者没有达到代码即模型

    作者回复: 为你鼓掌

    2021-07-22
    22
  • Oops!
    置顶
    夜不能寐,尝试答一下… 1 关联对象,通过将集合逻辑封装到关联对象中的方式解决聚合时性能和逻辑封装之间的矛盾。 2 角色对象,通过将实体在不同上下文中的逻辑封装在不同的角色对象中,解决上下文过载问题。 3 上下文对象,通过显式的对上下文进行建模,将跨域业务逻辑和上下文依赖封装到领域对象中,进一步解决上下文过载问题。 4 能力供应商,通过从基础设施层提取具备业务含义的能力接口纳入到领域层,消除基础设施层,将其转变为能力供应商,参与各层逻辑,解决传统分层下,领域层和基础设施层之间“不正当”的依赖关系破坏了领域层的稳定性的问题。

    作者回复: 课代表你好

    2021-07-22
    43
  • 梦倚栏杆
    说的非常对,but现在很多的实际场景就是根据代码来推测当时要解决的问题,也确实容易走偏(在熟悉业务之后,发现当时可能偏了)

    作者回复: 需要知识管理

    2021-07-22
    3
  • 6点无痛早起学习的和尚
    2024年01月17日09:04:28 所以我理解应该是定义清楚问题,再去找解决方案。同时我们学习设计模式的时候,也应该先清楚这个模式解决了什么问题,而不是直接上去学习模式是什么。
    2024-01-17归属地:北京
    1
  • 林铭铭
    最难的还是如何把问题定义好。
    2021-07-23
    1
    1
  • 设计模式不是设计出来的
    2021-07-22
    1
  • 云川
    换句话说,如果看代码知道了模式,那就可以确定其需要解决的问题和具体的解决方案。
    2023-04-03归属地:浙江
  • 201201624
    策略模式是应对行为,状态模式是应对状态
    2022-08-10归属地:中国香港
  • 云师兄
    深呼吸啊😮‍💨
    2021-07-23
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部