首页 > 其他分享 >每周一记9

每周一记9

时间:2023-04-12 14:24:38浏览次数:35  
标签:分成 算分 两个 职责 每周 耦合 一记 打球

首先,两个职责放在同一个类中,并不代表会发生耦合。



耦合的意思是当一个职责内部发生变动时,会影响到另外一个职责的正常执行。假设把两个职责的代码糅合在一起,形成一个大的代码块,这当然是耦合的,此时修改任何一个职责都要小心,牵一发而动全身。



但是我们可以把这两个职责放在两个不同的方法中,比如拆分成 Game.trackFrame(), Game.calcScore()两个方法后,在修改其中一个职责时,只要输入输出的参数不发生变化,也并不会产生耦合。也就是说,要解决耦合这一问题,并非只有“拆分成两个不同的类”这一个解决方案,在同一个类中拆分成两个方法也可以解决,因为拆分成方法是拆分成类的前提。是否需要拆分成类,还需要有其他方面的考虑,解耦这一理由还不够充分,此处就不详细展开。



其次,很多人都忽略了为何两个职责可以被拆分开。



我们需要回到现实生活来分析保龄球游戏的核心生命周期。



在现实生活中打保龄球时,确实有算分这一环节。在每一次打球结束时, 机器会自动给出分数。当然,在早期没有机器时,这个分数肯定是由打球人自己来算的。为什么后来可以拆分出来交给机器来算呢?因为算分活动必须等待打球结束才能进行,打球与算分二者在执行时间上是属于完全不会发生交叉的两个连续动作,且打球的结果作为算分的输入,所以两个动作本来就是没有耦合的,可以拆分开,成为保龄球游戏生命周期中的两个相续活动。



这两个活动哪一个才是核心生命周期活动呢?可以看到,人们去保龄球馆是为了亲身体验打球,而不是为了体验得分。而且即使没有算分规则,人们也 可以玩的很开心,但如果没有打球的体验,只有算分规则,那么这个游戏也就不成立了。所以,这个游戏的核心生命周期是打球,而非算分。算分只是在打球结束后对结果的计算,属于非核心生命周,因此分数计算规则代码可以从打球代码中拆分出来,以保龄球游戏所产生的结果作为算分的输入来推动执行,形成树状结构。



而在拆分后,Game 的原本功能并没发生任何变化,只不过将其中一个步骤的实现代码分离出去了而已,然后通过方法调用,以直接获取结果的方式整合回归,还是同一个整体,没有发生变化。这一做法,使得 Game 能够更加专注于其本身的职责,分数计算自身也能更加专注,各自被修改时也可以互不影响。



所以,二者能够拆分开,并非“Because each responsibility is an axis of change”,而是因为其中存在非核心生命周期活动。并且拆分也并不仅限于拆分成类,首先应该能拆分成方法,这是拆分为类的前提。

标签:分成,算分,两个,职责,每周,耦合,一记,打球
From: https://www.cnblogs.com/liuchao437/p/17309626.html

相关文章

  • 每周一记8
    Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore,......
  • 每周一记7
    公司 SpringBoot 项目在日常开发过程中发现服务启动过程异常缓慢,常常需要 6-7 分钟才能暴露端口,严重降低开发效率。通过 SpringBoot 的SpringApplicationRunListener......
  • 每周三题
    Buuctf-re-easyre下载文件解压后打开无信息,拖到IDA,F5看C语言代码  flag就在明文上。Buuctf-re-reserve1文件解压无法直接打开,拖进exeinfope查看  没有壳,为64......
  • 每周报告
    这周总体就是学习uniapp基本上也没遇到什么代码问题,这可能就是前端,代码问题遇到的很少,还有就是对springmvc的学习,这周学习后端比较的少,对于uniapp的课程还有一部分就学完......
  • Hugging Face 每周速递: ChatGPT API 怎么用?我们帮你搭好页面了
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为......
  • 每周总结
    本周做了大数据测试,复习了hive。差点就要忘了命令怎么使用,不过最后也是顺利完成。  但是大数据的mapreduce清洗还非常不熟练,我在想要不要下载kettle用kettle清洗。......
  • 4_13_天天一记
    继电器控制原理常闭NC常开NO公共端COM 拼板小板放在一起成本降低 低频高频超高频(双倍频6T)/显示屏(一帧)wifibluetoothgprs要求不高 过孔:上板串至下板 看......
  • 复旦高等代数II(22级)每周一题
    本学期的高等代数每周一题活动计划从第1教学周开始,到第15教学周结束,每周的周末公布1道思考题(共15道,思考题一般与下周授课内容密切相关),供大家思考和解答。每周一题将通过“......
  • 【计蒜课 每周三题】2023-02-25 第一题
    第一题题目描述给定一个长度为\(n\)的\(01\)序列\(a\),你可以对其进行若干次操作。对于一次操作,选择\(1\leql\leqr\leqn\),将\(a_l,…,a_r\)中的\(01\)翻转......
  • 【计蒜课 每周三题】2023-02-25 唱歌
    唱歌题目描述ame是一个可爱的女孩子,她想要唱歌。一共有\(n\)首歌,第\(i\)首歌的长度\(a_i\),同时唱第\(i\)首歌的满意值为\(b_i\)。ame喜欢的歌满足\(a_i\leq......