Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >趣解迪米特法则之《只是买台咖啡机,竟然要学习咖啡器的运行原理?》

趣解迪米特法则之《只是买台咖啡机,竟然要学习咖啡器的运行原理?》

原创
作者头像
爪哇缪斯
发布于 2023-09-01 09:26:34
发布于 2023-09-01 09:26:34
1460
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

〇、小故事

小王最近工作特别的忙,每天要早出晚归,睡眠质量很差,为了可以精力充沛的投入到每天的工作中,她都在上班路上买一杯公司楼下的星巴克咖啡来提提神。咖啡味道很好,但是每天买咖啡的人真的是太多了,本来上班的路上就已经很疲劳了,还要在店门口排半天的队,她觉得这种情况需要改变一下了。

那么既然早上要喝杯咖啡来提提神,何不自己买台咖啡机呢?早上起来,吃完早饭,喝杯自己做的咖啡,岂不美哉!于是乎,她就从网上买了一台咖啡机,她找了半天说明书,结果就找到一个客服电话,她打电话过去咨询为什么没有说明书?客户妹妹说,不需要说明书的,您可以参加我们的免费培训课程,一共20节课,我们会从原理上给您讲解咖啡机是工作原理的!

什么!我只是买台咖啡机,竟然要学习咖啡器的运行原理?”你们公司莫不是疯了吧。挂掉电话后,小王就把这款咖啡机退掉了……(虚拟故事,莫要当真~)

一、原则定义

通过上面的故事,大家肯定也会觉得非常的荒谬。我买一台咖啡机,你就告诉我怎么使用就可以了呗!干嘛要我去学习你们咖啡机的工作原理呢!那难道我买一台汽车,我还要学习汽车工作原理吗!

所以,在日常生活中,迪米特法则就已经融入到我们的生活中了。那么,到底什么是迪米特法则呢?我们来看一下它的定义:

LoDLaw of Demeter):也称为最少知识原则。描述的是:一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂,那是你的事儿,和我没关系,我就知道你提供的这么多方法,我就调用这么多,其他的我一概不关系。

那么,还是以买咖啡机为例,我们买了一款咖啡机,只需要根据说明书,知道怎么制作一杯香浓的咖啡即可,其他的我就不关注了。这也就是日常生活中的迪米特法则/最少知识原则

而在我们开发的时候,也需要遵循这个设计原则。比如我们常常在开发过程中,需要调用其他研发团队的接口,来实现某种业务逻辑,我们以支付为例。作为我们使用方,只需要对方提供一个支付接口,调用后返回支付成功或支付失败&失败原因即可。如果对方开发人员给了你2,3个接口,让你按照某些支付流程去调用,这显然就违背了迪米特法则了。你应该立刻针对其中的不合理性进行讨论,而不是听之任之。

二、原则实践

上面的故事和原理相信大家都已经有所了解了,我们还是举一个业务上的小例子,再来加深说明一下违反里式替换后可能会出现的问题。

业务背景:

当一个微信用户要在我们系统操作业务逻辑的时候,我们的需求是: 【1】如果微信用户没有注册我们系统的话,我们默认的调用注册接口去注册它,注册成功后,把用户信息返回给业务系统; 【2】如果她已经注册了,即已经存在于我们的用户表,则把用户信息返回给业务系统,再通过它的用户信息,进行下一步业务操作。 那么针对于这个需求,我们其实应该是希望负责用户信息的研发团队,给我们提供一个接口,即:获得用户信息的接口。而不应该提供用户信息查询接口,用户信息注册接口,甚至底层还涉及到其他安全性接口,由我们一步一步的去调用,这样就违反了迪米特法则了。

以上做法类似DDD里面领域划分的概念。是我域负责的业务我负责,不是我域的业务,由相关领域负责即可。

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
趣解开闭原则之《我发誓!再也不买一体机了》
小王大学毕业后,找了一份像样的工作,早八晚五轻松自在,并且收入也不错。自从大学毕业后,家里用的电脑还是他上大学的时候用了四年的电脑,配置性能早已跟不上现在的时代了。他决定用自己赚的工资买一台家用电脑。
爪哇缪斯
2023/09/01
1910
趣解开闭原则之《我发誓!再也不买一体机了》
设计模式六大原则(五)----迪米特法则
迪米特法则(Law of Demeter )又叫做最少知识原则,也就是说,一个对象应当对其他对象尽可能少的了解。不和陌生人说话。英文简写为: LoD。
用户7798898
2021/06/17
8.1K1
如何破解一台智能咖啡机
随着物理网的普及,其安全性尤其重要,近日有国外黑客破解一台智能咖啡机,下面就一起来看一下吧。 故事起因 最近一名意大利黑客Simone Margaritelli破解了一台智能咖啡机,Simone是一名移动安全研究员,同时从事高级汇编、C、C++语言开发软件工作,并在Zimperium公司任职,曾开发一款软件工具bettercap,利用这款工具可完成中间人攻击测试。平时Simone很喜欢喝咖啡,于是在几天前他购买了一款咖啡机,并可通过APP来控制咖啡机。于是他就尝试利用逆向工程来控制咖啡机,并达成自己的目的。
FB客服
2018/02/09
8960
如何破解一台智能咖啡机
穿越十年后看互联网+:家电行业的金矿在哪里?
现在市场上炒得火热的智能家居未来出路在何方?做智能家居的创业者应该注意哪些机会?传统家电厂商又到底如何借助互联网进行转型?本文以智能空调为例,用故事的形式,提前带你进入激动人心的未来世界。
IT阅读排行榜
2018/08/13
4980
Service 应该定义怎样的方法?
最近在代码审查时,会发现一些校招新同学会把一些步骤当做 Service 的方法,在 Facade 层对这些步骤进行编排来完成一个完整的功能。这显然是不太正常的。
明明如月学长
2022/01/25
3941
Service 应该定义怎样的方法?
趣解设计模式之《为什么租房子要找中介?》
小王大学毕业了,打算来北京闯荡一下,于是就先寄宿到了他的表姐家,白天的时候,自己在外面小区转一转,看看能不能找到可以租到的房子,他找了好几天都没有找到合适的,要么就是小区里一张租房子的广告都没有,好不容易找到几个,里面的房间大小和价格又不合适。北京实在是太大了,而且这边人生地不熟的,找房子真的是耗费了他大量的力气。
爪哇缪斯
2023/10/06
1780
趣解设计模式之《为什么租房子要找中介?》
面试官:设计原则有哪些?什么是里式替换原则?
RBAC:基于角色的访问控制(Role-Based Access Control)
爪哇缪斯
2023/05/10
2470
面试官:设计原则有哪些?什么是里式替换原则?
给大家简简单单介绍一下设计模式
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴,又到了一年一度最佳找工作的时节,你拿到心仪的offer了吗?基于大多数粉丝的要求,让小编写整理一些面
Java学术趴
2022/05/19
3580
给大家简简单单介绍一下设计模式
LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
prompt(提示词)是我们和 LLM 互动最常用的方式,我们提供给 LLM 的 Prompt 作为模型的输入,并希望 LLM 反馈我们期待的结果。 虽然 LLM 的功能非常强大,但 LLM 对提示词(prompt)也非常敏感。这使得提示词工程成为一项需要培养的重要技能。
汀丶人工智能
2024/05/09
3.8K0
LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
学会这10个设计原则,离架构师又进了一步!!!
一个懂设计原则的程序猿,写出来的代码可扩展性就是强,后续的人看代码如沐春风。相反,如果代码写的跟流水账似的,完全一根筋平铺下来,后续无论换谁接手维护都要骂娘。
麦洛
2021/07/05
2990
学会这10个设计原则,离架构师又进了一步!!!
大数据运维三十六计
随着互联网的发展,大数据正在以惊人的速度被创造和收集着,尤其随着诸如Google和Alibaba等互联网公司的崛起,数据的价值越来越得到认可,甚至被公司定义为战略资源。因此越来越多的公司开始搭建自己的大数据平台,用来处理数据,从中挖掘商业价值。大数据运维正是在这样的背景下发展起来的,它与传统领域的运维有很多共性的地方,也有一些自身的特点。 第一个特点是规模大 大数据领域单个集群的规模一般是几百台物理机,多则上万台。为了满足容灾需求,一般会有多个集群,而且是跨地域部署的。集群规模大
用户1682855
2018/06/08
2.7K0
面向程序员的数据挖掘指南(一)
作者:Ron Zacharski 第一章:简介 内容: 寻找事物 本书结构 阅读完本书后你可以做些什么? 为什么数据挖掘很重要?哪些内容可以为我所用? 标题里的“Numerati的古老艺术”是什么意思
小莹莹
2018/04/24
7480
面向程序员的数据挖掘指南(一)
如何成为Android高手 博客分类: 经典文章转载 Android互联网中国移动网络应用应用服务器
若立志成为Android高手 ,如有耐心,“一瓶一钵足矣”。   “天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。”想成为Android高手?这可不是想象中写几行 代码 那么容易的事情,但也不是不可实现。   如何做?   1,学会懒惰!奇怪吧?但是,你一定也听说过和感受过这个世界某种程度上是由懒人推动的,生命在于懒惰,懒人创造世界。当然,懒惰也是真的傻傻的呆在 那里什么都不做,而是说要善于想出做事情的更好的方式,这样就可以节约大量的时间,也就有更多的机会懒惰了,同事也懒出了境界。在Android中如何懒 惰?《如何成为Android高手》一文就如何在Android中学会懒惰和朋友们进行了分享。   2,精通Android体系架构、MVC、常见的 设计 模式、控制反转(IoC):这一点难吗?“学之,则难者亦易矣;不学,则易者亦难矣。”   3,编写可重用、可扩展、可维护、灵活性高的代码:Android 应用 程序 开发 的使用纯粹面向对象的Java 作为开发语言,自然也就继承了关于Java关于面向对象的优秀想思想,如何做?《如何成为Android高手》一文就如何在Android中编写可重用、可扩展、可维护、灵活性高的代码和朋友们进行了分享。   4,高效的编写高效的代码:高效的编写代码和编写高效的代码好像天生就是死敌。似乎开发速度上去了,程序的执行效率就下去了;程序的执行效率上去,开发速度就下去了。如何 解决 二者的忙着,请听《如何成为Android高手》一文想大家娓娓道来。   5,学会至少一门服务器端开发技术:没搞错吧,成为Android高手还需要 学习 服务端开发技术?对,需要!《如何成为Android高手》一文就该问题和大家进行了分享。   “蜀之鄙,有二僧:其一贫,其一富。贫者语于富者曰:"吾欲之南海,何如?"富者曰:"子何恃而往?"曰:"吾一瓶一钵足矣。"富者曰:"吾数年来欲 买舟而下,犹未能也。子何恃而往!"越明年,贫者自南海还,以告富者,富者有惭色。西蜀之去南海,不知几千里也,僧富者不能至,而贫者至之,人之立志,顾 不如蜀鄙之僧哉 ”   若立志成为Android高手,如有耐心,“一瓶一钵足矣”。 Android一出生就被打上了富二代的胎记,不仅仅是因为诞生于当今的 网络 霸主Google ,更主要还有一个空前强大和壮观的开放手机 联盟OHA(Open Handset Alliance)提供全力的支持。OHA是什么?OHA涵盖了中国移动、T-Mobile、Sprint等移动运营商,包括HTC 、Motolora、三星等手机制造商,有Google为代表的手机软件 商,还有Inter、Nvidia为标志的底层硬件厂商和Astonishing Tribe等商业运作公司,该组织声称组织的所有成员都会基于Android来开发新的手机业务。   但是,要成为Android高手并不是一件容易的事情。并不是很多人想象的能够飞快的写出几行漂亮的代码去解决一些困难的问题就是Android高手了。真正的Android高手需要考虑的问题远远不是写些漂亮的代码就足够的。
chroya
2018/10/31
5650
精读《可维护性思考》
前端精读之前写了 23 篇设计模式总结文,再加上 6 种设计原则,开闭、单一职责、依赖倒置、接口分离、迪米特法则、里氏替换原则,基本上对代码的可维护性有了全面深刻的理解。
黄子毅
2022/03/15
2980
精读《可维护性思考》
📑教你如何编写一份 API 文档
当你购买一件新产品时,它会附带一本说明书,指导你如何使用。你不会希望把新买的游戏机带回家开箱后发现没有一本关于设置、使用和维护的手册。如果客户不知道如何使用产品,他们就不太可能被公司的产品吸引或在未来购买其他产品。
oil欧呦
2024/05/07
2940
从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
本文介绍了蚂蚁金服异地多活单元化架构的原理,以及微服务体系在此架构下的关键技术实现。
数据和云
2018/12/19
1.3K0
从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
全栈软件测试工程师宝典连载(4)
现在软件测试界对软件自动化测试非常重视,每年有各种各样的软件测试大会,而这些大会的关注点都集中在软件自动化测试,对软件测试自动化开始重视了,这是一件好事情,本书下篇也都是介绍软件测试自动化的。但是另一方面,据权威报告,2019年在中国仅有5%的软件公司做到了完全意义上的软件自动化测试,这说明了什么?请读者自己思考一下。读者都知道软件开发,不管采取什么样的开发模型,都离不开分析、设计、编码、测试和部署5个环节,而软件测试也可以分为测试分析、测试设计、测试准备(包括测试数据的准备、测试代码的开发、测试环境的搭建等几个方面)、测试执行和测试总结。而现在AI技术刚刚起步,虽然一些大厂开始尝试用AI技术来进行软件测试分析、设计与执行,但是效果并不理想,MBT(Model Base Test:基于模型的软件测试)落地也非常困难,自动化软件测试也仅仅在软件测试执行方面起到了非常重要的作用,虽然随着DevOps概念的提出,软件测试的左移和右移也被提出,但是发现缺陷仍旧是软件测试的关键目标,而大部分缺陷还是需要靠人工测试来完成,软件自动化测试主要作用也仅仅在回归测试起到关键的作用。一方面在开发自动化软件测试代码之前,肯定也进行手工测试,否则自动化测试中的断言是无法获知的;另一方面自动化软件测试对被测程序也要进行分析和设计,所以软件测试分析与设计是软件测试的灵魂,是一个不可被忽略的要素。
顾翔
2021/01/18
3750
腾讯云TVP史海峰:从烽火台到物联网
10月19日,云+社区开发者大会(北京站)圆满落幕。本次开发者大会的主题为“5G探索:核心技术与挑战”,邀请了腾讯内部及业内行业大咖就5G场景下应该如何面对新业务与挑战?大型网站的技术应该如何进化?如何真正理解万物互联?5G有哪些值得探索与实践的方向?5G对应用发展的影响有哪些?等问题进行了深度探讨。同时,在圆桌论坛环节,各位技术专家也与到场的开发者们展开了开放式对话,精彩不断。下边是史海峰老师关于5G时代是否能实现万物互联的分享。
TVP官方团队
2019/11/07
2.6K1
腾讯云TVP史海峰:从烽火台到物联网
像素时代的黄昏和“淘宝叛军”
浅友们好~我是史中,我的日常生活是开撩五湖四海的科技大牛,我会尝试各种姿势,把他们的无边脑洞和温情故事讲给你听。
浅黑科技
2022/06/06
5130
像素时代的黄昏和“淘宝叛军”
从烽火台到物联网
虽然我们还不能完全掌握生命的机理,但基于对基因的理解,我们知道一切生命体的核心都在于信息,是信息载体,也是信息处理器。
IT民工闲话
2019/11/14
1.2K1
从烽火台到物联网
相关推荐
趣解开闭原则之《我发誓!再也不买一体机了》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档