怎么避免自己写的代码变成屎山?

2022-11-28 10:11:01 +08:00
 qinrui
11353 次点击
所在节点    程序员
118 条回复
liuidetmks
2022-11-28 14:03:09 +08:00
3 天开需求会,1 天开发,1 天测试上线
很难~
leafre
2022-11-28 14:13:12 +08:00
不要动其他的史山
Daniel17
2022-11-28 14:16:58 +08:00
一直重构
mawenjian
2022-11-28 14:19:12 +08:00
领域驱动设计,面向对象编程,多用设计模式,合理划分类间职责。

根据个人经验,使用面向过程写的代码,最后变成屎山基本是必然的。
anonymous2351d00
2022-11-28 14:26:47 +08:00
重构
yeyu123
2022-11-28 14:43:48 +08:00
一直重构
lilyok1234
2022-11-28 14:43:50 +08:00
写这么好干嘛,工作这么多年发现写的好的 bug 少,绩效差。写的烂 bug 多,绩效好。又不是不能用
eason1874
2022-11-28 14:47:02 +08:00
变成屎山是必然的,就像你不断往家里塞东西,东西多到超出原先的承载能力了,原先再整齐的房子也会变得很乱,除非重构,也就是每隔一段时间换一个房子,重新收纳
yxzblue
2022-11-28 15:18:02 +08:00
为什么有人可以在屎一样混乱的几千行代码里加功能?不重构能驾驭屎山吗?
https://www.zhihu.com/question/497344549/answer/2215116962
daokedao
2022-11-28 15:20:05 +08:00
高手都是拉完屎就换地方,去开辟新的项目(屎山)
ruoxie
2022-11-28 15:26:29 +08:00
分层
xumng123
2022-11-28 15:28:55 +08:00
避免不了
aliveyang
2022-11-28 16:04:24 +08:00
只要不再屎上堆屎,屎永远都不会堆成山
fournoas
2022-11-28 16:12:54 +08:00
只要坑挖得深,山就堆不起来
1vonzhang
2022-11-28 16:35:49 +08:00
我读书的时候也思考过这个问题,那时候太 naive ,觉得水平够高就可以不写屎山了。现在工作了几年,有了一些新的心得:

0. 核心是要认识到,你以为的需求,你设想的发展方向,你预先做的架构和设计,都会不可避免的朝着你意想不到的方向发展。特别是会发展好多年的软件。

1. 高内聚,低耦合是避免屎山的真理。永远把功能最小模块化,并设计出好的 API ,是面对改变得心应手的关键。具体怎么分割、怎么设计 API ,是需要一定功底的。

2. 像楼上很多朋友说的,重构不可避免,不要害怕重构,也不要为了重构而重构。过度重构和过度设计是一样的,都是在把路提前铺好,导致以后修路只能缝缝补补。我做的最多的重构,是在进行稍微大一点的改动之前,把一个部分拆成好几个模块,然后对每个小部分独立的进行修改。

3. 模块化的东西不要考虑 context 。某一个部分可能只是为了某一个应用场景写的,但是设计的时候要把模块独立考虑,而不是从外部看这个模块会被怎么用到。这样一来可以保证低耦合,二来可以在之后有不同使用场景时,不需要各种补丁代码。
zjj19950716
2022-11-28 16:54:38 +08:00
主动或者被动得吃了太多泻药,不搞屎山难不成大活人还要被屎憋死吗? 所以正视屎山,屎崩的时候没有一坨翔是无辜的。
BrightLiao
2022-11-28 16:55:06 +08:00
一旦你看你的代码快要变成山了,就得考虑是不是代码垒得太高了。拆分成两座或更多的土丘是大多数人的选择。

考虑:
- 从技术上看,有没有模块是非常复杂的,但是是独立的。如有,拆出去,专门给某个人或团队维护。
- 从业务上看,有没有两个业务本来就是相关性很低的,考虑拆分为不同的项目,交给不同的人维护。

现在大家在谈微服务,其实就是谈拆分,如何避免一个项目内的东西过于复杂。
pC0oc4EbCSsJUy4W
2022-11-28 16:55:25 +08:00
周期重构
nicebird
2022-11-28 17:05:53 +08:00
基本做不到。人如果被放到被不能胜任的位置,代码复杂度 hold 不住的话,就走向屎山。
QKgf555H87Fp0cth
2022-11-28 17:06:34 +08:00
我的代码我一直觉得它是 shit ,但是我技术又没办法达到改成别人的样子,所以呢?

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

https://www.v2ex.com/t/898413

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

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

© 2021 V2EX