大道至简,把项目中的设计模式、多继承、各种抽象类全干掉了,只保留了单例,舒服了。当年年轻的时候总是想办法写的优雅,归来仍是少年。

5 天前
 ajaxgoldfish0
5798 次点击
所在节点    程序员
52 条回复
OC0311
4 天前
刚开始业务的时候 总想用设计模式 考虑以后的各种扩展,但是时间长了就会发现 ,产品的迭代往往不在之前预留的这些槽上 即便有相关领域的业务经验每家公司的产品提出来的需求都是有很大差异的。
EndlessMemory
4 天前
手段终究是手段,不要当成目的
wobuhuicode
4 天前
是现在机器好了,没有经历过 OOM 毒打才会想到做到只保留单例
doug
4 天前
@SvenWong 其实那是一个功能很简单的项目 但是接手了 5 个人 后面接的人因为是量产项目也不敢怎样大改 反正遇到有新的需求 就那样直接复制上 结果越整越恶心
xloger
4 天前
额,这更多是出在“水平”上面,而不是“设计模式”的问题。
我说的直白了点,但不是针对楼主,你就当是我自己的感悟吧:

代码的复杂度,最少也是等同于现实里这套需求的复杂度。
好的架构设计,是拟合现实需求的,将其拆散、梳理成一个个可拆卸组装的子模块。
不好的设计,一种自然就是过度设计,也就是光套各种设计模式,反而把自己束缚了。
另一种不好的设计,就是一大个混沌系统,把“复杂度”一部分放在了开发者脑子里。

过多的单例就是一个馄饨的体现。
有几个模块,假设我们严格按照分层,是很容易遇到一些特殊场景。怎么跨层传递数据、或者类似的一些问题。
设计得不好但还要强行遵守,就是加各种传递方法,千层饼。另一种就是改成单例互相调来调去,进一步增加复杂度。
很明显的,还有一条路,就是梳理思索这些模块究竟怎么分配合理,每个地方的语义是啥,怎么做是最清晰的。

拿上面几位朋友的说法补充点我的想法:
1 、简单初步的设计模式运用,这并不是“精巧”。架构设计的目的是分层、隔离,降低复杂度。
如果只是代码层面的“解耦合”,而不是业务“解耦合”,那自然会出现:看似规范地写了接口和实现,然后频繁地接口加方法、实现类加方法,然后感觉这个接口毫无意义不如去掉。
这个的根源在于你这个接口的定义设计得不合理。
2 、看一段逻辑需要跳到不同的文件里看好几处。
这同样是一种具体写法不对导致的复杂度上升。要规避的是
fun main {
step1()
step2()
step3()
}
这种写法。而是要让一段逻辑的核心在一块。也就是更多时候问题是出现在“拆代码的方式不对”,而不是“不该拆代码”。

这些能力都是要靠锻炼出来的,我们普通人只能靠努力和多动脑才能让自己越做越好。而不是浅尝辄止,觉得这些 XX 、YY 不就是那么回事嘛。
aweim
4 天前
我早就放弃了,越简单越好
yunnysunny
4 天前
没有多态,硬要继承
islaohu
4 天前
最好的代码设计就是不设计
seansong
4 天前
明明每天只有 10 req ,却操着 10billion req 的心,从而把自己给设计进去了
rainbowhu
4 天前
功能不复杂,代码就不用写复杂。后面功能复杂了,按需求迭代重构就完了。正确实现功能的前提下,简单,易读,bug 少就是好代码,管他有没有套路。
horizon
3 天前
那直接写成一个文件不是更好
zhady009
3 天前
@xloger 看到这种标题我就想要看看他们的代码, 抽象抽得四不像没有抓到点子上, 不该抽象的抽象等等一句话总结就是用错了或者不合理, 导致你后面一连串的问题又全部推给设计模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1147369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX