`

“山寨”框架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上的半成品框架,对推动整个国家计算机水平进步,是完全没有什么大作用的

相关推荐

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