大公司的核心项目代码也不是那么美好(c++)
不同的页面,相似的功能,没有抽象全是复制粘贴。想改成模版元编程或者二级指针抽象,发现又不是完全复制,都是把结构体换了个名字复制,二十几个文件顿时丧失优化兴趣。反正能跑就跑算了
不同的页面,相似的功能,没有抽象全是复制粘贴。想改成模版元编程或者二级指针抽象,发现又不是完全复制,都是把结构体换了个名字复制,二十几个文件顿时丧失优化兴趣。反正能跑就跑算了
建议从业务初衷去理解一下工程
为了 don’t repeat,而生硬地造处一堆概念,我觉得污染了代码的可读性、可维护性。
==============
虽然轮子哥 @GeniusVczh 非常推崇 DRY 原则,但是,在某些人那里,DRY 就是个灾难,因为他没有足够的抽象能力,DRY 出来的东西就是一堆狗屎,然后每次要加新功能,就彻底重写一次;或者是每次加新功能,都要打一堆补丁,然后你发现,补丁摞补丁,终于又成了一堆屎山。
================
抽象过度是个问题
抽象不足也是个问题
抽象能力决定了你的抽象的普适性
”抽象过度是个问题
抽象不足也是个问题
抽象能力决定了你的抽象的普适性” 你说的这个就是没有在开发中动态的去调整抽象设计,前期的抽像设计可能在开发中需要调整, 前期的抽象是基于对项目的理解和过往的经验得到的,谁也不知道在具体在开发中会遇到坑,还要考虑产部隔三差 5 加新需求, 这些都需要根据具体情况和应用调整抽像的设计,这些都可能导致前面的代码都是重写,工作量巨大。 如果没有对项目或编程有极大的爱好的人是不会这么干的。 毕竟大家都是打工的。东西能跑就可以了。
可能抽象后的代码扩展性不强。
可能别人理解起来会困难。
可能抽象所需时间比较长。
可能这些代码仅仅是局部的,无关全局。
即使是涉及到架构方面的代码,还有一个权衡利弊,判断是否要重构的过程。何况其他的代码呢!
我秒懂了,这人是培训班出来的。
真的自学科班出身,哪有这样封装的,都是能用就行。
每一座屎山都是一段历史,没有经历过的人 真的没资格去评论。
“不同的页面,相似的功能” 假如页面变化较大,一个页面要改一个 小组件来实现,一个不要改怎么搞?
也许这么写是比较好读又好改的折中方案呢。
优化的过程其实对企业产生不了效益,反而增加测试同学的负担,优化的时候都是非常谨慎,生怕影响原来的代码逻辑。
现在看来,优化代码前,还是得先从单元测试入手,一步一步让屎山变为金山银山吧。
@ericgui
实际上都是先有的重复,然后才有的抽象。
还有一些项目虽然很有名也很厉害,比如 Linux 内核的,其实不建议参考,一是为了尽可能保证效率各种骚操作多,二是历史包袱也是有点重的。
[1]: Whither Literate Programming (1)/(2)/(3).
我个人觉得,抽象也好,各种设计模式也好,过于学术,过于完美。而现实不是完美的,所以现实的东西总是看起来这里有缺点,那里有缺点。所以我觉得,程序员尤其不能处女座
内部项目你代码质量写的好是能反向 PUA leader 吗?
要打破这个循环,要改变的是管理层的思维和决策方式还有自顶而下的协作方式。在大厂这部分基本都比较固化,前线员工是无法改变体制的。这是出现的 side-effect 就是,前线员工一边骂着老板傻逼,一般要加班加点干出实现逻辑,各种技术决策开始折中妥协。后来加入的人又再循环,“在屎上面继续拉屎”。
回到管理层的问题,其实是企业文化的反应,而企业文化又不是一时半刻形成的,更不可能被前线员工,甚至中层管理者可以撼动的。如果你能忍受,可以继续待下去。如果不能,那就找适合自己的环境。
这样看来,我们的编码规范、原则和思想都可以通过人和时间完善。但是在冰山下隐藏的,本质上不是技术问题,而是协同与管理的问题。
出自 react redux 核心开发者的文章
https://overreacted.io/zh-hans/goodbye-clean-code/
代码简洁这个问题,还是要找一个平衡点,要抽象也要解耦。