`

“山寨”框架3宗罪

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

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

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

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

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

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

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

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

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

我想问问那些正在发明框架的同学,你弄明白为什么要MVC,为什么要ORM,为什么要IoC了吗?
分享到:
评论
149 楼 zcy860511 2010-02-05  
框架是什么?是在编程过程中的提炼,自己写框架很正常,为什么老喜欢用山寨这样的词?
国人总要做一点自己的东西才行吧
148 楼 lkj107 2010-02-03  
就框架讨论框架,是个很无聊的话题
文学来源于生活,又高于生活
框架来源于项目,又高于项目
做框架是由于对众多的项目的重复的工作的提取,然后泛化,用在以后 的项目中,提高重用性
每个公司、行业都有自己项目的特点,因此每个公司的框架可能都不同
但是有些技术的是使用基本所有的项目的,是有共同点的,这个就提取出了非常大陆的框架,例如spring等
所以各个公司可以在已有的框架,例如spring,webwork基础上开发适用于自己公司的框架
框架的作用是让项目规范化,开发者傻瓜化,就跟傻瓜相机一样,普及化,但是要整专业的摄像机,还是要用到专业的相机的。
真正的一帮牛人做项目可能会看到框架的不足,自己重新开发的,这个也就是JAVA语言的起源
147 楼 zornschuetze 2009-04-22  
国产框架像JDon,讨论的人很多,不过我没有使用过。还有金蝶的AOM,还是有不少优点的,像富客户端组件,类似ASP.NET通过拖放控件,设置属性画页面,可以把控件绑定到后台,页面连EL表达式都不需要,控件的属性和方法都能在后台控制,当然了,如果想使用EL,还是支持的,还有对AJAX的支持,不用再写JavaScript代码,也不需要第三方框架,控件本身就完成了这个工作。还有对Spring的支持是无缝集成的,Spring的ManagedBean和AOM页面绑定的LiteBean是等价的,还有自己的IDE工具支持。不过现在还处于版本急速变化的时期,还不够稳定,使用的话,还是要谨慎,如果用AOM,开发的效率确实有很大提高
146 楼 Hooopo 2009-04-21  
murainwood 写道
grandboy 写道
什么时候能出现一些好的"国产""品牌""开源"的框架?

国产的是我一直期盼的。
品牌是要有质量保证和长期维护,并且建立在大量的客户群的基础上。
开源我认为是建立大量客户群的方式之一。国内有些人做出一个东西,还要什么钱才能用,这种框架趁早不要用。

就像现在的国产手机,那个质量十个有八个都不行。当然不乏有质量好的,但是也被那些滥的东西给带坏了。

一大堆呢,大大小小的。

什么啊?
145 楼 murainwood 2009-04-21  
grandboy 写道
什么时候能出现一些好的"国产""品牌""开源"的框架?

国产的是我一直期盼的。
品牌是要有质量保证和长期维护,并且建立在大量的客户群的基础上。
开源我认为是建立大量客户群的方式之一。国内有些人做出一个东西,还要什么钱才能用,这种框架趁早不要用。

就像现在的国产手机,那个质量十个有八个都不行。当然不乏有质量好的,但是也被那些滥的东西给带坏了。

一大堆呢,大大小小的。
144 楼 chgle 2009-04-21  
有需要的时候还是可以自己写些框架,使用已有的开源框架虽然可以大大提高开发效率,但这些框架往往无法让你很好地在自己的业务逻辑之上把握底层的系统性能,无所谓山不山寨仅仅是需不需要
143 楼 grandboy 2009-04-16  
什么时候能出现一些好的"国产""品牌""开源"的框架?

国产的是我一直期盼的。
品牌是要有质量保证和长期维护,并且建立在大量的客户群的基础上。
开源我认为是建立大量客户群的方式之一。国内有些人做出一个东西,还要什么钱才能用,这种框架趁早不要用。

就像现在的国产手机,那个质量十个有八个都不行。当然不乏有质量好的,但是也被那些滥的东西给带坏了。
142 楼 yangyi 2009-04-15  
这样的主题没有意义,框架就是框架,何必说他的“山寨”来打击呢。
衡量一个框架的好坏来自于“3个有利于”:
是否有利于发展软件公司的生产力,是否有利于增强软件公司的竞争力,是否有利于提高程序员的软件开发水平和质量

总之,要实事求是:)
141 楼 zozoh 2009-04-09  
楼上的明显没仔细看贴,现在已经明确主题为 “公司内部烂山寨框架 3 宗罪” 了

140 楼 TaoistWar 2009-04-09  
什么时候来的山寨框架了?开源的框架不也是那部分人自制的吗?当初Spring还是一个产品呢!不也是一个人制的!要说山寨,是框架都是了
139 楼 zozoh 2009-04-09  
eyeqq 写道
zozoh 写道
eyeqq 写道
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。


请问,怎么“强行”推广啊? 人家作者又没有枪 

楼主主要是讲公司里面的山寨风,所以我说的强行是说公司里头那些有权势的制造者做的推广。一般的普通群众带不带枪都无所谓啦~~~



恩恩,没了“公司里的” 这个定语,你打击面扩大了不少,活活活。
话说回来,我现在就正在公司里用我的框架来替代SSH,哪个要是敢有怨言,哼哼...

所以,在这里我对我的组员们表示深深的同情 
138 楼 aninfeel 2009-04-08  
zozoh 写道
eyeqq 写道
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。


请问,怎么“强行”推广啊? 人家作者又没有枪 

就是在本公司强行推广啊,我就遇到了,nnd,使用它的结果是和种种bug和不便做斗争。
137 楼 eyeqq 2009-04-08  
zozoh 写道
eyeqq 写道
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。


请问,怎么“强行”推广啊? 人家作者又没有枪 

楼主主要是讲公司里面的山寨风,所以我说的强行是说公司里头那些有权势的制造者做的推广。一般的普通群众带不带枪都无所谓啦~~~
136 楼 yuan 2009-04-08  
hantsy 写道
山寨框架的确也恼火。。。原来公司也是这么干,北京那边养了一帮人,可能没有事做,于是要打造自己的框架。后来出来之后一看,只是struts 1的阉割版本,除了Action 的什么剔除了。Struts 1 所拥有的validation, form 状态维护,tiles支持都被改得用不上了。
最糟糕的是,要将Action改成 Struts2 方式,属性自动填充,连 Action 最基本的线程安全都不知道。
当然这个山寨版本得到了公司很多人的拥护,特别高层,一些会议上常常以此来表现的丰功伟绩。
在项目应用后,这个东西问题多多,不光是上面提到的问题,增加了开发量,很多代码,只要是有一定经验的程序员一眼就可以看出有问题。经过测试,我证实了我的想法,并且可以判定,这是一个连最基本的单元测试都没有进行的框架。
在公司论坛发布这个观点,还好,公司虽然“忽悠”之声占了主流,但还是有些同事,也与我持有相同的看法。
现在,终于离开那个地狱般的地方,不必面对一群“忽悠”,不必天天受山寨“框架”的折磨。


再引用一下经典的那段:

Rod Johnson 写道
一些个人、一些团队之所以会实现那种过度复杂的架构,往往还有一些让人更加无法原谅的原因。
在所谓“以复杂性为生的行业”中,帝国本位主义是一个很险恶的因素。复杂性能带来新工作。在大型项目中,如果你采取任何措施降低复杂性,都肯定会危害到其他若干“帝国”的利益。帝国本位主义者们明知有一些工作存在方向错误,但还是欣然地守住这一亩三分地;如果你想质疑这些工作的初衷,那就等着他们反唇相讥好了。比如说,在上文提到的那个项目中,我指出这个基础架构层的整个想法就是有偏差的,但是对方却报以猛烈的反驳,这里的实际原因不外乎是:如果这个项目不成立,那么整整一个团队(七八名开发人员)都成了多余的人,那个半吊子的架构师的名声会毁于一旦,而且为该项目提供咨询的顾问公司收到的报酬也会缩水。具有讽刺意味的是,这个基础架构项目的花费十倍于预算、并且还延误了整体项目进度,本来早该被处理,但是恰恰是因为已经花费的代价太高,所以管理者反而无法下手了。没有人——哪怕是与该项目毫无直接干系的人——敢于向高层管理者透露,这项目浪费了这么多时间和金钱。


我读这段的时候忍不住拍手。
135 楼 hantsy 2009-04-08  
山寨框架的确也恼火。。。原来公司也是这么干,北京那边养了一帮人,可能没有事做,于是要打造自己的框架。后来出来之后一看,只是struts 1的阉割版本,除了Action 的什么剔除了。Struts 1 所拥有的validation, form 状态维护,tiles支持都被改得用不上了。
最糟糕的是,要将Action改成 Struts2 方式,属性自动填充,连 Action 最基本的线程安全都不知道。
当然这个山寨版本得到了公司很多人的拥护,特别高层,一些会议上常常以此来表现的丰功伟绩。
在项目应用后,这个东西问题多多,不光是上面提到的问题,增加了开发量,很多代码,只要是有一定经验的程序员一眼就可以看出有问题。经过测试,我证实了我的想法,并且可以判定,这是一个连最基本的单元测试都没有进行的框架。
在公司论坛发布这个观点,还好,公司虽然“忽悠”之声占了主流,但还是有些同事,也与我持有相同的看法。
现在,终于离开那个地狱般的地方,不必面对一群“忽悠”,不必天天受山寨“框架”的折磨。
134 楼 feynman 2009-04-06  
yuan 写道

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

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

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


一:如果该框架是公司的产品,新人来到这个公司,不管学习成本有多高都是有必要学习的。至于在这里积累的经验以后在别处能否用到是两码事,公司毕竟是公司,不是培训机构,雇你来是干活的,不是专门给其它公司培养人才的。所以,无论在哪个公司,一旦你决定留下来,正确的选择,有且只有一个,那就是根据公司的业务来调整自己的方向,否则请离开。

二:如果山寨框架必定BUG多多的话,那么山寨框架的定义就有必要修改。自制的且BUG多多的框架才算山寨框架。

三:如果该框架的开发人员是一个Team,那么依赖整个Team并不算什么严重的事情。这里的“过于依赖老员工”准确来说应该是“过于依赖某个老员工”。那么山寨框架的定义又有必要修改了。由个别员工制作的框架才算山寨框架。

综合以上,楼主鞭笞的山寨框架应该是:由个别员工自制的BUG多多的个人作品
133 楼 unsid 2009-04-06  
什么是山寨,我搞不懂,“非官方”就是山寨,那正宗的JavaEE框架就是那些在jsr有定义的JSF,EJB,JPA,JAXWS,JAXRPC,JAXB,JMS,JMX,JAAS,JACC...等等实现了这些规范的框架。
132 楼 zozoh 2009-04-06  
eyeqq 写道
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。


请问,怎么“强行”推广啊? 人家作者又没有枪 
131 楼 alanwu 2009-04-04  
我觉得框架可以分为两种,技术框架和业务框架。
技术框架比如ORM,CACHE,MVC等有非常成熟的,没必要自己做
业务框架每个领域不同,而且是每个公司的核心不会公布,就必须要自己做
130 楼 netfork 2009-04-02  
eyeqq 写道
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。


SpringSide的定位还是挺正确的!恰如其分!

相关推荐

Global site tag (gtag.js) - Google Analytics