`

“山寨”框架3宗罪

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

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

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

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

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

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

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

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

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

我想问问那些正在发明框架的同学,你弄明白为什么要MVC,为什么要ORM,为什么要IoC了吗?
分享到:
评论
129 楼 eyeqq 2009-04-01  
山寨框架如果自己拿来练练手我倒是觉得没什么大不了的。但是要强行推广,那就很恶心了。
很喜欢像SpringSide那样做主流框架的扩展的事,做一些最佳实践的东西方便大家。
128 楼 netfork 2009-04-01  
murainwood 写道
nychen2000 写道
slaser 写道
如果思想上不能超越现有框架,或者说毫无特别之处,最好不要造出怪鱼来。


赞同这个观点,我们说要站在前人的肩膀上,结果我们往往站在前人的脚跟上,为什么?
因为很多时候是我们的能力还不足以爬到前人的肩膀上,暂时爬不到没有关系,可怕的是还不自知。

爬脚跟时候有人可以高喊“为了新中国的SSH,冲啊!”....


打造新中国的XXXX,冲啊!!!
127 楼 yidao620c 2009-04-01  
呵呵。有的时候还是有用的。不过适合我们去研究,而不是使用。
126 楼 murainwood 2009-04-01  
nychen2000 写道
slaser 写道
如果思想上不能超越现有框架,或者说毫无特别之处,最好不要造出怪鱼来。


赞同这个观点,我们说要站在前人的肩膀上,结果我们往往站在前人的脚跟上,为什么?
因为很多时候是我们的能力还不足以爬到前人的肩膀上,暂时爬不到没有关系,可怕的是还不自知。

爬脚跟时候有人可以高喊“为了新中国的SSH,冲啊!”....
125 楼 kaipingk 2009-04-01  
真无名 写道
突然想起以前那个公司有一个山寨的web框架
可能在2002年左右做的,我觉得非常好,基本上web该有的功能都实现了。
可以说这个框架可以再封装好点就是spring了。

问题是那个NB的程序员离开了公司了,
后来的同事没有人能摸透那个框架,而偏偏有几个大客户都是依赖在这个框架上。
.....结果大家都知道....
好惨.......客户的这些产品很难有大的突破了..
我想迟早会失去这些客户的。


这些事情不是你个搞开发的事情! 客户丢了关你鸟事啊,你操心,你们的CEO这方面考虑比你差????
124 楼 nychen2000 2009-04-01  
slaser 写道
如果思想上不能超越现有框架,或者说毫无特别之处,最好不要造出怪鱼来。


赞同这个观点,我们说要站在前人的肩膀上,结果我们往往站在前人的脚跟上,为什么?
因为很多时候是我们的能力还不足以爬到前人的肩膀上,暂时爬不到没有关系,可怕的是还不自知。
123 楼 xudengke 2009-04-01  
kernaling.wong 写道
其实我觉得不是山寨不山寨的意思,问题是理解框架的核心目的与思想是什么,至于怎样去用,怎样去开发其他类似的框架这并不是问题,就好象,全球的大部分的CPU市场已经被intel与amd占领了,是不是其他国家开发自己的CPU就是浪费,是重复发明轮子?如果自己写开发的框架从设计思想上,从代码性能上可以足以动摇主流框架的地位的话,这是一件好事。说明自己的框架有其生存空间,开源的目的不是仅仅的使用,更重要是学会其设计的目的与思想,这样才不会失去框架和开源的意义,顺便说一下,我觉得楼上的那个catstorage绝对是一个很好的思想与创意,至少Hibernate亦是发展过来的。

理解框架的设计思想后,对原有开源框架进行创新,优化,简化以提高自己的工作效率,这种框架,我们应该是要支持的。而且正是我们要提倡的。
122 楼 kernaling.wong 2009-03-30  
其实我觉得不是山寨不山寨的意思,问题是理解框架的核心目的与思想是什么,至于怎样去用,怎样去开发其他类似的框架这并不是问题,就好象,全球的大部分的CPU市场已经被intel与amd占领了,是不是其他国家开发自己的CPU就是浪费,是重复发明轮子?如果自己写开发的框架从设计思想上,从代码性能上可以足以动摇主流框架的地位的话,这是一件好事。说明自己的框架有其生存空间,开源的目的不是仅仅的使用,更重要是学会其设计的目的与思想,这样才不会失去框架和开源的意义,顺便说一下,我觉得楼上的那个catstorage绝对是一个很好的思想与创意,至少Hibernate亦是发展过来的。
121 楼 魔力猫咪 2009-03-29  
我也造了个“山寨”框架,源代码已经放到GoogleCode上了,正在编写使用帮助。欢迎大家来拍砖。这个是使用Apache许可证的开源产品,我尽可能在代码里写了注释来帮助大家阅读代码。
地址http://code.google.com/p/catstorage/
120 楼 slaser 2009-03-28  
如果思想上不能超越现有框架,或者说毫无特别之处,最好不要造出怪鱼来。
119 楼 jnoee 2009-03-28  
一个永远都扯不清的话题。在javaeye就看过很多框架的发布帖和计划帖,雷声大雨声小,99.5%现在都已无声无息了。
我不反对创新与改进,不过提个小建议。弄之前先与现有的同类框架做个对比,将要开发的框架的优点列出来,做一个评估。是否能实现?是否需要重写?或者扩展改进就可以达到目的,然后再开始弄。
118 楼 accphc 2009-03-28  
“公司里做开发,应该以实现业务为主,技术为辅”很有道理!
乱七八糟的框架,学死人啊!
117 楼 wing922wing 2009-03-28  
    如果从个人学习出发,做山寨不但不为罪,还应该大力鼓励,做好后,拿出来分享,无论多么初级的山寨,都应该有包容和鼓励的眼光来看待。
    但是在公司层次来说,利用手中的资源来给自己做山寨练习能力,然后留下一堆不成熟的代码,拍拍屁股走人,这种山寨行为极为恶劣,相信大家工作中,都见识过类似山寨的危害。
    而且大部分这种山寨框架多是闭门造车,根本不管现有技术的发展,自顾自搞出一套垃圾代码,哪怕市面上已经有比其好用百倍的好东西,还是一定要造自己的土轮子。
    个人认为,作为一个专业的程序员,公司请你来上班,不是让你来练手的,你拿了这份工资,应该给公司提供生产效率最高,质量最好的产品,如果已经有开源框架或者组件良好支持的东西,就不需要自己再去动手做这些,好钢要用在刀刃上,不要浪费公司的工资玩自己的技术。
    如果从个人学习或者开源的角度看,无论做什么的尝试都是可以被包容并被鼓励的,只是作为一个开发团队,除非在公司层次上因为战略需要,确实给予你资源做平台或者组件,否则拿公司的资源去实现市面早已成熟的优秀框架与组件,这样的人是没有职业道德的。
    这个问题根本不应该从个人技术成长方面考虑,那是你自己的事,从公司的角度出发,关注的是生产效率和质量,事实上大家都为在成型的框架或组件基础上做一些修改和改进,但是自己从头搞一套市面上已经实现了很好的框架,然后通过公司的项目来测试自己的技术,代价就是效率和质量的下降,这种行为是可耻的。
    我想楼主所反对的山寨框架,就是指这样闭门造车或者拿公司资源给自己练手的恶劣行为,而不是扼杀大家通过做框架学习甚至开源的行为,反对方应该搞清这个逻辑,如果连简单逻辑都没法搞清就上来一顿高调唱下来,这样的思维能力也确实没什么能力开发什么好框架。
116 楼 andy54321 2009-03-27  
楼主分析的是
115 楼 csc365kl 2009-03-27  
没那么多精力去看那么多框架 我不是非主流
114 楼 hatedance 2009-03-27  
山寨是其成为非山寨的前身。没有必要打击山寨。
搞山寨跟具体项目里要不要采用某个山寨框架那完全是另外一个问题。

小公司发展初期,一般都会留下一些自创的框架。我觉得是无法避免的。人的水平也在成长。(qq是怎么来的?linux要不要?甚至为什么有了unix还要搞dos?)

有一点是肯定的,如果大家水平都很高了,又是新起的项目,自然应该不要用山寨框架。

举个例子,taobao的框架据说是自己搞的山寨框架,大家觉得有何不妥?
113 楼 buaalijie 2009-03-27  
我觉得可以稍微改一下:(要是都不造轮子,迟早老轮子废了,然后就没有用的了)

1,什么叫山寨?框架就是框架.

2,不是绝对不设计,不造轮子,而是慎重,能有始有终,
确定自己这个团队有这个能力.
112 楼 yuan 2009-03-27  
teclogid 写道
你觉得他的框架不好,你可以给他优化重构,如果你还没有达到依葫芦画瓢的水平,有什么资格来指责依葫芦画瓢的?没有谁学了几天java,就整了一个nb无比的框架。事物发展有个过程。
干站在那儿指责,眼高手低,这种人最让人鄙视。做事要务实。

说真的,我还真想这么干过。问题是这样的烂骨架上再披了好几层烂肉,要动起刀子来,那动作得多大你想过没有?要停下多少时间来干这个事你想过没有?干这事得有领导支持吧,可人家领导丢一句话“这可是XX博士设计的框架,能比开源的差?”我就没办法反驳了,你说我能干啥?
111 楼 coolnight 2009-03-27  
<div class="quote_title"><br /></div>
<div class="quote_title">最终结论都会是公司的问题而不是个人的问题</div>
<div class="quote_title"><br /></div>
<div class="quote_title">真无名 写道<br /></div>
<div class="quote_div">
<div class="quote_title">wendong007 写道</div>
<div class="quote_div">
<div class="quote_title">coolnight 写道</div>
<div class="quote_div">
<div class="quote_title">真无名 写道</div>
<div class="quote_div"><span style="font-size: large;"><strong>后来的同事没有人能摸透那个框架</strong></span><br /></div>
<br /><br />如果能够摸透spring,hibernate,不能摸透这么一个框架? <br /><br />大有可能是程序员没有动力去摸透它吧,排除能力的因素<br /></div>
<p> </p>
<p>不一定哦,如果文档都没写好,总不能让后续的人去研究源码吧,好的框架还是应该有一定的易用性的</p>
</div>
<p><br />都是原因,而且大家知道,一个02年的框架在概念上好多已经落后了,怎么去和用户不停变化的需求接轨? 就算摸透了又怎么样?</p>
<p>公司本身没有一个好的机制延续这个框架,就只能看着他慢慢废弃, 堕落。</p>
</div>
<p> </p>
110 楼 steeven 2009-03-27  
俺们公司还在用上个世纪的框架呢~

活的久不是错, 问题是活得太丑.

相关推荐

    山寨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