`

“山寨”框架3宗罪

阅读更多
刚看了个自制框架的帖子,其实之前这类帖子见得比较多,吵得也都挺厉害。好像总有人一边对提议“不要发明轮子”的同学挺反感,一边以发明家自居,把话扯到中国的软件业上去。之前还看到有人见到“只用SSH的公司“坚决不去。我想说说我的看法。

我觉得框架这东西,首先要明白为什么要用它——这是废话,但又是最重要的。真的有些人是不知道为什么用框架,乱用一通,产品代码乱七八糟。

然后是学习如何用好它,掌握框架后接着可能会发现它的不足,然后要是能够的话,再试试用用其它的框架,选一个最合适的。如果实在找不着你需要的框架了,这个时候如果公司允许,你再去改进某个框架,或者研读它的源代码参考着做个更好的。

否则,我觉得你的“发明”永远只是在你的作坊公司里用用、制造混乱而已。

要说发明国产框架,其实国产框架已经数不清了,而不是屈指可数了。要不要试做个调查,自己发明框架的公司有多少,因此造成产品难以维护的公司又有多少?

说“不要重复造轮子”并不是在打击人,只是在提一个建议。

我是山寨框架的受害者。山寨框架罪状第一条:提高新手学习成本。人家学好了流行的框架进公司本来可以弄清业务逻辑后直接上手,你非得弄个自制框架,让新人多花时间出来学习框架,浪费公司资源不说,一不小心你的框架理念还能误导新人,害人又害己。人家离开这家公司后,在这积累的经验在别处也许还用不上。

山寨框架罪状第二条:降低产品质量。公司里做开发,应该以实现业务为主,技术为辅,如果自制框架,你不得不花额外的时间在框架的维护上(bug往往很多,性能好坏说不定)。使用开源框架,你大部分时间只需要关注业务逻辑(相对自制框架来说);如果自制框架,你不得不花大量精力在业务逻辑以外的技术实现上。人的精力是有限的,同时关注2种事情往往会2种事情都做不好,所谓一心不能二用。开源框架有庞大的开源社区替你承担了这些风险,替你保证了质量,为什么不用?

山寨框架罪状第三条:过于依赖老员工。这个说起来简单,开发这框架的人一旦离职,这个框架以及因它而造成的烂推子便很难收拾。除非你花重金找gigix来重构一把。

我想问问那些正在发明框架的同学,你弄明白为什么要MVC,为什么要ORM,为什么要IoC了吗?
分享到:
评论
9 楼 打倒小日本 2009-03-23  
过犹不及
中国所有的程序员都自己创造框架 那肯定完蛋
但要使都没野心 信心 都是拿来主义 那何时能腾飞啊

写自己的代码 让别人折腾去吧
8 楼 wendong007 2009-03-23  
<p>偶也在造山寨框架,不过偶的框架只是给自己用的,一是符合自己的使用习惯,本着约定大于配置的原则,能简化就简化,而且还会加入很多个性化的功能。二是功能够用就好,只实现自己需要的那部分功能,比起第三方的框架要轻量的多。三是以学习为目的,反正现在还在学校里,时间多的是,写个框架学到的东西总比写几个垃圾站多的多,唯一的遗憾就是没钱可赚<br /><br />偶的山寨框架不仅仅是框架,应该算是自己的一个工具箱,不仅提供了IOC、MVC的支持,自己常用的东西,像权限管理、验证码、通用DAO之类的东西我都集成进去,而且还有一些自己的新想法在里面,反正我也没考虑给别人用,这样的一套东西拿来做小项目最合适不过,可以极大的提高效率(我说的只是提高我自己的效率)<br /><br />不过偶现在开始用ROR了</p>
<p> </p>
7 楼 mliz 2009-03-23  
一个TEAM,如果只是临时拼凑到一起赶个项目,没有自己的东西也就算了,长期在一起的TEAM,自己一点积累都没有,纯属不思进取
6 楼 liuchaoyong 2009-03-23  
支持国产的东西,别老拿国外的开源来问老子懂不懂,精通吗?f u c k you
5 楼 murainwood 2009-03-23  
以我的经验,正儿八经做项目做产品,是整个Team的事情。
4 楼 liujunsong 2009-03-23  
自己写框架这事情嘛,有好处,也有坏处.
从我自己的经验来看,如果你自己曾经做过一个框架,哪怕非常非常简单,非常非常简陋,在做的这个过程中你都需要思考很多东西,分析很多东西,才能发现那些功能是最核心,最重要的,而那些是后面加的可有可无的.
有人谈过这样一个观点:你要真正理解一个东西,你就需要把他做出来.
这个说的是有一定道理的.
但在项目开发中盲目使用这种东西,确实有很浪费时间.
我觉得这些问题都没有标准答案,怎么做都有道理,度需要各人自己掌握了.
3 楼 yuan 2009-03-23  
Bernard 写道
不知道你有没有这样的感受,有时候思维局限性是由已知事物产生的。知道的越多反而思路越受到拘束。
取其精华去其糟粕不一定是建立在对“其”的绝对充分了解基础上的。
换种角度来讲就是说如果你陷入了对“其”的理解陷阱中会分不清 精华 和 糟粕。
很多概念 比如 先入为主,使用习惯 都是这个道理。
你认为对的东西别人看来不一定是对的,更不可能是最好的。
对ORM,IoC这些东西我保持的是怀疑、体验对比…的态度去寻找较好解决方案的。


我明白你的意思是“习惯”、“先入为主”这个东西如果自己控制不好会比较害人,让人多走弯路。比如说习惯预先设计的人在学习TDD的时候就会觉得这里不对、那里也不对——他还不习惯一切抽象类、接口、一切设计都是自然而然的产生。
再可以扯扯电影、小说里那些大师教徒弟某种绝世武功的时候,常会说:要学会这门功夫,你要先忘掉之前所学的一切……

有理。这个道理我懂。我也没有非得MVC、ORM、IoC不可的意思,其实陷在MVC、ORM、IoC里面的人有可能还是没明白为什么要这么做。我那个问题要继续追问下去还有:为什么要分层,为什么要面向接口编程,为什么要解耦合,为什么大家都喊着DDD,为什么要OO,面向过程真的不好么。其实最终的目的还不都是为了更容易、更高质量的进行软件开发——说烂了的“可扩展”、“易维护”,找着根本了,这些“名词”自然就弄明白了。

Bernard 写道
如果只是觉得自己能写个框架就能显摆出自己有水平,就可以受领导青睐,然后生搬硬套一些东西来做的话。
我可以明确的告诉你,从叫它框架的那一时刻起你已经错了。
依赖老员工也是可以避免的,如果这个人就是希望有这种结果,那也没什么好办法。
一个框架可以被称为烂摊子,那也就不能叫它框架了。这就不多说了,更多的应该是人治。

我只是给这样的框架搞怕了,我自己遇到过烂框架,我认识的一些朋友也跟我诉过苦,所以见着自制框架的都比较担心。你也说了要把框架做好,做到避免新手学习成本高的程度很难,我不知道连为什么要用框架都没弄清楚就开始自制框架的人有多少,我很怕和这样的人成为同事一起工作。

p.s:我还是把主帖的链接去掉吧。
2 楼 Bernard 2009-03-23  
哈哈…山寨也用来形容框架了。
俺也在造山寨框架。
你说的情况确实存在,而且不少。
但都是建立在开发人员不负责任的基础上的。

我的保守原则是保持简单强大,符合用户习惯。

学习成本较高这不可避免么?显然可以避免,如果你的代码结构清晰思路良好,符合习惯(的确这个很难做到)。
我写的第一个框架是自用的Php开发的,很多内容都是为亲近代码生成而设计的。
当然产生的维护问题不少,不过在这个过程中很容易就可以积累到不少其他使用者的习惯信息。为重构提供了基础。
这是事物必然的发展过程,lz不需要这么悲愤。

产品质量问题。为什么你会认为自制框架就“往往”bug多呢?首先再好的框架也避免不了bug问题,尤其是由使用者自身产生的bug。
开源社区能保证在我在发现bug后3分钟之内解决问题并决定发布新的版本么?如果自己修改这些bug然后向社区提交能保证这也是
别人不可避免能够接受的bug么?这样就不能保证后续版本也不出这个Bug。也就是说用别人的框架其实也是稀里糊涂的接受了很多漏洞,
而自己的框架是较为明了的接受了很多漏洞。这样说也许有些牵强,但有实践经验为产品负责任的人肯定是会尽量避免bug产生的。
如果只是觉得自己能写个框架就能显摆出自己有水平,就可以受领导青睐,然后生搬硬套一些东西来做的话。
我可以明确的告诉你,从叫它框架的那一时刻起你已经错了。

依赖老员工也是可以避免的,如果这个人就是希望有这种结果,那也没什么好办法。
一个框架可以被称为烂摊子,那也就不能叫它框架了。这就不多说了,更多的应该是人治。

MVC是什么要细细道来我确实给不出一篇非常精辟的文章来描述。
但我知道它是为了什么、想要做什么……这也许是概念被用烂了有些人就开始反感了。
不知道你有没有这样的感受,有时候思维局限性是由已知事物产生的。知道的越多反而思路越受到拘束。
取其精华去其糟粕不一定是建立在对“其”的绝对充分了解基础上的。
换种角度来讲就是说如果你陷入了对“其”的理解陷阱中会分不清 精华 和 糟粕。
很多概念 比如 先入为主,使用习惯 都是这个道理。
你认为对的东西别人看来不一定是对的,更不可能是最好的。
对ORM,IoC这些东西我保持的是怀疑、体验对比…的态度去寻找较好解决方案的。

说民族大义的那位更多的是在发牢骚,你拿他来说事显然不公平。
“对推动整个国家计算机水平进步” 到底有没有作用?
这个我可不敢贸然猜测,妄听妄言。
我想只有用心做过,经过实践的人才有发言权吧。

上文无针对性敌意批评,仅供参考。诚心听取具有建树性,实用性的建议。
1 楼 murainwood 2009-03-23  
是的。动辄就扯到民族软件业民族大义的调调,实在让人反感。自己写framwork无可厚非,自己做着玩也无可厚非,但是如果利用话语权在公司内部强行推广,这就有待商榷了。
我相信,在半导体技术落后,在基础领域落后的国家,靠自己写个跑在JVM,跑在Web  server上的半成品框架,对推动整个国家计算机水平进步,是完全没有什么大作用的

相关推荐

Global site tag (gtag.js) - Google Analytics