`

“山寨”框架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的定位还是挺正确的!恰如其分!

相关推荐

    山寨struts2框架

    一个山寨版struts2框架,集合和struts2,spring mvc等一些框架的某些特定。比较适合开发web网站。默认采用velocity模板技术。欢迎大家指点。 qq:418148757,邮箱418148757@qq.com

    swing 山寨版验证框架

    【Swing山寨版验证框架】是一个用于B/S和C/S应用的验证工具,它旨在提供基本的数据验证功能,减轻开发者因使用STRUTS验证框架所带来的约束。这个框架的核心是通过自定义的`MQDocument`类,它继承自`PlainDocument`,...

    山寨的一个MVC框架

    MVC框架是软件开发中一种常见的设计模式,它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,以实现业务逻辑、数据处理和用户界面的分离,提高代码的可维护性和可扩展性。在Java领域,...

    java版山寨QQ项目源码

    java版山寨QQ项目 里面有四个压缩包 ...Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理模块通过XStream配置成插件模式. 4.把界面整得更炫了些.

    山寨索尼M3 3.2固件 sony-M3

    3. **准备工具**:通常,你需要一个能够连接设备的电脑和相应的刷机工具。对于山寨设备,可能还需要特殊的驱动程序才能被电脑识别。 4. **进入刷机模式**:根据设备的说明书,将设备置于刷机模式,这通常通过特定的...

    山寨版qq源码.素材

    3. **数据库管理**:用户信息、聊天记录等都需要存储在数据库中,学习源码可以帮助我们理解如何设计和操作数据库,比如使用SQLite或MySQL。 4. **UI设计与实现**:山寨版QQ的UI设计模仿了原版,可以让我们了解如何...

    使用Vuejs框架搭建的rubychina山寨版

    Vue.js 框架是目前前端开发中非常流行的轻量级库,以其组件化、响应式数据绑定和易上手的特性受到了广大开发者喜爱。在本项目“使用Vuejs框架搭建的rubychina山寨版”中,我们看到的是一个基于Vue.js实现的Ruby ...

    山寨网线显形记山寨网线显形记

    1. **Cat3(三类线)**:设计用于支持10Mbps的数据传输速率,但由于其性能限制,现在已经很少使用。 2. **Cat5(五类线)**:支持100Mbps的数据传输速率,广泛应用于早期的网络环境中。 3. **Cat5e(超五类线)**:...

    山寨版QQ,聊天通信

    3. **多线程**:为了保证用户体验,客户端需要处理多个并发任务,如接收消息、发送消息、更新联系人状态等。Java的多线程机制使得这些任务可以在不同的线程上并行执行,提高程序效率。 4. **数据加密**:考虑到通信...

    山寨主板的BIOS ROM

    山寨主板的BIOS ROM

    E盾山寨E盾E语言的源码

    山寨E盾,将需要登陆的程序山寨到本地,或者指定的服务器上

    山寨机java游戏

    3. **全屏游戏体验**:全屏游戏意味着游戏界面会占据整个手机屏幕,提供更沉浸式的游戏体验。在Java平台上实现全屏游戏,开发者需要调整游戏代码以适应不同设备的屏幕尺寸,并处理好屏幕比例和分辨率问题。 4. **...

    山寨版qq源码+素材

    山寨版qq源码素材山寨版qq源码+素材山寨版qq源码+素材山寨版qq源码+素材

    山寨版QQ源代码

    从描述来看,开发者强调了其正规模式的构架,这意味着尽管是“山寨”版本,但在开发过程中可能遵循了一定的设计规范和标准,以确保软件的稳定性和安全性。 在分析这个项目时,我们可以关注以下几个重要的知识点: ...

    (一)只是在山寨 不要太认真 网易新闻框架 by CJJ

    【标题】"(一)只是在山寨 不要太认真 网易新闻框架 by CJJ" 暗示我们讨论的是一个仿制网易新闻应用程序的Android框架,由开发者CJJ创建。这个框架可能是为了教学、学习或快速构建类似新闻阅读应用而设计的。 ...

    山寨APP的危害以及防止山寨APP的方法

    3. **品牌受损**:山寨APP往往质量较差,用户体验不佳,这会影响用户对正版应用的看法,降低其市场竞争力。 4. **用户流失**:当用户无法分辨正版与山寨应用时,可能会选择使用山寨版本,导致正版应用的用户数量下降...

    山寨QQ Version2.0.zip

    3. **注释完善**:代码中包含了详尽的注释,这在学习过程中非常重要,因为注释能够帮助读者理解代码逻辑,提高学习效率,尤其对于初学者来说,能更快地掌握项目的核心思想。 4. **对话功能**:实现聊天功能是即时...

    JavaFX山寨QQ2016

    10. **社区和资源**:JavaFX有一个活跃的社区,提供了大量的教程、示例代码和第三方库,可以帮助开发者快速学习和解决问题。 从"JavaFX山寨QQ2016"的描述来看,开发者可能使用了JavaFX的主要特性,如组件、样式和...

    山寨HTC VIVA刷机教程(图文)

    【标题】:“山寨HTC VIVA刷机教程(图文)”是指针对非官方版本的HTC VIVA手机进行系统升级或修复的操作指南,通常这类设备在市场中被称为“山寨机”。这个教程是通过图文并茂的方式,帮助用户了解如何对搭载海思K3...

    java实现的山寨版QQ

    项目可能使用了Java的Serializable接口或者第三方库如Google的Protocol Buffers、Facebook的Thrift或Apache Avro来实现这一过程。 6. **事件驱动编程**:Java的事件监听机制使得程序能够实时响应用户的操作,例如...

Global site tag (gtag.js) - Google Analytics