Re: [分享] 用一个简单的数学公式来帮忙设计OOP类别

楼主: as30385438 (LCT)   2020-05-20 01:37:45
先讲结论:
我反对原文的结论“OOP易学难精”
就我个人到现在的感受是“难学易精”
为什么呢?
以下分享个人看法
不管是不是OOP,其实种种软件层面的架构手段主要都是想解决一个问题
“让一个庞大复杂的软件专案变得更好维护”
这又可大概分为两个方向
1. 可扩充性
面对新需求时会不会难以改动,是不是每次加功能都要改一堆地方?
常常动一个小地方,造成其他看似无关的模组坏掉?
2. 可维护性
程式码的逻辑是不是很好理解
会不会一个新人来看几个礼拜还是黑人问号
每一份档案、类别、函式
甚至到每一行程式码的目的,是不是都足够明确
当然,以上两点是有相关的
这两点的重要性,就算是刚上班几个月的新手,也是非常容易理解
而OOP里面的什么pattern、什么SOLID原则
其实说穿了也都是在让程式更好维护和扩充而已
“难学”,是因为一开始接触OOP,因为其概念繁多
如果没有掌握核心思想很容易就被各种各样的名词给唬住
“易精”,是因为那些繁杂的概念其实都只是手段,目的是很明确易懂的
OO的核心观念:“抽象化”
是为了让外面的使用者只看到必要的接口
不受内部细节的改动影响
而实作者只在乎如何满足定制好的接口
至少80%的design pattern,都是在告诉你该怎么把抽象化做好
factory pattern
告诉你创造物件的逻辑要抽象化,外面就不必在乎实作类别的改动
strategy pattern
告诉你行为的抽象化可以用组合,达成更好的解藕并可在runtime时更换
iterator pattern
告诉你聚合类的物件可以提供一个抽象的接口
让使用者不须关心内部时做的资料结构就可以存取所有item
另外所谓好的程式码,怎么会是junior没办法分辨?
要是你用了很多OOP的手段,但是没办法轻易解释得让你们公司的新人听懂这样做好处是
什么
那大概就是你认为的好code其实没那么好
没有搞懂OOP在干嘛,以为只是把code放在class内就算OOP
然后又看到原文这种似是而非的观念,我是不认为会有什么帮助
以原文提到的service object为例
的确这是一个有争议的pattern
但要说他没有内聚性是一件很奇怪的事情
service object其中一目的就是把domain相关的逻辑集中起来
这些逻辑本身就是紧密相关的
要用文章内提到CR值去说他没有内聚性,真的是怎么看怎么怪
真的很讲究OO,拆类别的时机也不应该是参数重复出现什么的
而是现有class的职责太多吧
最后
其实软件架构的名著Clean Architecture
就已经很丰富又很好懂了
每个阶段看都有不同的感受
真的有想搞懂OOP应该去弄一本来读读
而不是在这边算什么CR值...
作者: trojan (Nick)   2020-05-20 01:53:00
很棒,言简意赅
作者: onegoman (SKY)   2020-05-20 02:16:00
作者: bibo9901 (function(){})()   2020-05-20 02:25:00
推,那个CR值跟本垃圾
作者: tmacmm (mm)   2020-05-20 03:08:00
不能同意更多了
作者: gn1943141 (鸠脸)   2020-05-20 08:00:00
认同本篇除了难学易精,很多设计大家都知到,但实作不一定能写出漂亮的架构
作者: qrtt1 (有些事,有时候。。。)   2020-05-20 08:44:00
Clean Architecture 新手要看有点吃力,但随着经验增加会越来越上手的。前阵子也试着练习了一下,还写了个记录http://bit.ly/39xC9Ar 记录的位置https://bit.ly/3fZThCx 这是有点烙赛的 talk 版本
作者: t64141 (榕树)   2020-05-20 09:45:00
同意
作者: vi000246 (Vi)   2020-05-20 09:45:00
同意 oop是用来解决问题 不是制造问题的能解决问题的都是好OOP
作者: Masakiad (Masaki)   2020-05-20 10:09:00
如何把抽象做好比较接近SOLID,DP是延伸SOLID应用,如何在遇到或设计初始选用适合的DP,背后包含整体架构上、Domain Knowlege、Force等等得考量。跟单纯探讨把抽象做好算不同层次的概念。
作者: bnd0327 (阿噗噗)   2020-05-20 11:02:00
大家可能被KPI压榨怕了,但我觉得拿来自己比较还好啦另外推这篇观念清楚
作者: strlen (strlen)   2020-05-20 11:56:00
另外提醒SOLID和DP都是要“看情况”用的 不要以为一直用一直爽 OOP写过头是会有over design的症头的 而且这症头还不地方有 甚至很多知名开源专案都是一堆没必要的design
作者: coder5566 (寇得56)   2020-05-20 12:23:00
推,好文
作者: yyhsiu (hsiu)   2020-05-20 15:18:00
很同意“目标”,不要把教科书上的全部照搬就觉得是 clean
作者: genius945 (添财)   2020-05-20 20:57:00
推,都是为了达成目标的手段
作者: alihue (wanda wanda)   2020-05-20 21:11:00
你的难学在指写,精在指读懂
作者: virgil246 (virgil585)   2020-05-20 22:49:00
借串问 那clean code需要读吗?
作者: fantasychese (林阿宅)   2020-05-21 01:52:00
建议先读clean code就好 clean architecture去看Uncle Bob原始演讲 后来出的书其实写得不怎么样
作者: electgpro (Ray(甫))   2020-05-21 06:34:00
你的精可能只是别人认为的初阶而已关于 clean code,我刚读完觉得很不错,现在觉得比较像心灵鸡汤
作者: abc01251 (爪哥)   2020-05-21 12:36:00
同意~说穿了所有Pattern目的都一样
作者: paul7751 (一块卡 (>﹏<)/)   2020-05-21 17:05:00
推 好文
作者: art1 (人,原来不是人)   2020-05-21 19:08:00
看过高手写的 java 程式才第一次了解到 OOP 的威力,好读好懂好修改

Links booklink

Contact Us: admin [ a t ] ucptt.com