`
fyting
  • 浏览: 216885 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

开源框架VS土制框架

    博客分类:
  • Java
阅读更多
真的没想到,现在还会出现是否应该使用开源框架的争论。说说我很久以来的看法,权作一笑:

引用
版权问题

很多Java开源项目都使用ApacheLicence2.0或者LGPL,商业软件中使用完全没有问题。

引用
开发人员积极性问题

普通的开发人员,都更愿意学习流行的框架,也就是说积极性更高。说实话,对员工的发展也更好(找工作更容易)。有的时候,就会有人抱怨为什么不用Spring啊这些,然后有的人要么会偷偷使用,要么会搞一个稀奇古怪的自己的东西,很影响项目开发,维护。

引用
维护问题

维护自制的框架需要工作量,由谁去维护成为一个问题。修改过程中,避免BUG出现,保证不影响以前的客户端代码也是一个问题。

引用
可移植性问题

自制的东西很少遵守标准开发,如果再加上满地的静态方法和丑陋的设计,想要进行单元测试都是空话,想修改后不出BUG是不可能的,当然,想要移植就更加困难。尤其是满地的DBConnectionManager、ConnectionPool、DBUtils,再加上遇到同名不同包的情况(几个相同名字的连接管理类,存放在不同的包,但连接不同的数据库),想不改出问题很难。一个标准的javax.sql.DataSource接口就那么难实现?
说到移植性,又顺便说下普通的IOC原则,看看下面这个简单的代码就知道了:
public class UserDao{
    public void createUser(User user){
        Connection conn = DBConnectionManager.getConnection();
    }
}

移植的时候,除了DAO,是不是还需要把DBConnectionManager这个东西给带过去?再看看下面这样的:
public class UserDao{
    private DataSource dataSource;
    public void setDataSource(DataSource dataSource){
        this.dataSource = dataSource;
    }

    public void createUser(User user){
        Connection conn = this.dataSource.getConnection();
    }
}

现在UserDao的实现只依赖DataSource这个接口,移植的时候,直接修改DataSource配置,传入不同DataSource就是了。单元测试就更加简单,手动setDataSource就行。
而前面那个代码怎么单元测试?DBConnectionManager容易替换吗?是不是还需要修改DBConnectionManager的源代码?那要是在jar包里面呢,又怎么修改?移植就更麻烦了,要是移植到的系统已经有个相同名字的DBConnectionManager,但需要取连接的却是另外一个叫做DBUtils的类(一个项目中连接多个数据库很常见吧?),又怎么办?很多时候,用静态方法都不得不手动修改代码,就祈祷全文替换不要出错误吧。
第二种实现看似代码长度增加了,多了个setDataSource方法,可想想,如果还有其他的editUser,deleteUser,代码长度谁更有优势,是不是还需要每次都去调用这个恶心的长长的DBConnectionManager?
这个是DAO,当然不需要单元测试,其他service代码里的什么静态工厂引用就会遇到单元测试问题了。


引用
性能和稳定性问题

开源框架的开发人员基本都是高手,一般是每个公司最好的程序员。像Rod Johnson、Gavin King等人,比起一般公司里的开发人员,根本不在一个档次,甚至根本没必要拿来比。当然,SourceForge上粗制劣造的开源项目也不少,但这种东西注定了不会流行,流行的都是开源项目中的佼佼者。甚至可以说,开源项目强烈影响和冲击了各种标准,Spring和Hibernate,彻底颠覆了旧的EJB2,然后才有了更加先进的EJB3(JSR-220),而其中的JPA(Java Persistence API),更是Hibernate的一个子集。实在不能把开源框架的性能和稳定性作为质疑的条件,难道自己制造的框架就一定比开源的更稳定?难道自制的框架都有很完备的测试?在质疑的同时,是否对这些开源项目有过较深入的了解,或者说是否使用过?是否真正知道使用后的好处与坏处?如果根本不了解,又如何能质疑它们?
自己不去了解就永远也不知道是否有性能问题,也许根本不存在呢?稳定性?说实话,我更怀疑根本没有经过单元测试就制造出来了的代码。

引用
嗯,看上去不错,用熟练了可能也很好,但这些框架都需要一个熟悉的过程,需要代价。

这是一个伪命题,为什么呢。说这些话的人都是搞了一套自己的框架,对于他们来说,使用其他框架当然需要学习。但对于公司其他人来说,使用这些自制的框架也需要学习,遇到稀奇古怪的问题也很郁闷,如果开发这个框架的人不在公司,只能自己从代码中慢慢找错误。这个是有切身体会的,很郁闷,不客气地说,很多自制的代码基本上比开源的差了不止一个档次,不容易跟踪到错误根源。

引用
那好,从别的框架取出好的部分,消化后转换为自己的代码。

FT。首先需要自己维护,麻烦。文档要重新写,麻烦。转换过程中不一定像开源框架那样有完整的测试(单元测试,集成测试),容易出错。最重要的问题,看似自己消化掉了,转换为了自己所理解的。但是没有参与“消化”的程序员,面对被“消化”掉重新构造出来的代码,难道就不需要消化了吗?像StringUtils这种东西,jakarta-commons-lang有一大堆方法了,再自己去写相同功能的就实在没有必要。自己写的web框架,就更容易漏洞百出了,自己写的就是比WebWork好?我相信,每个人都比Richard Oberg、Lightbody等人牛。

引用
那么,我们为什么要用开源框架

为了赶时髦。:)
为了和外面的世界接轨,为了用标准开发,增加可移植性。
为了框架挈约杜绝不好的开发方式,使项目更容易维护。
为了各个项目组之间不再各自行事,都重复搞一套自己的轮子。
为了让员工积极性更高。
当然,最重要的是为了解决实际问题,更好更快速地完成任务,达成目标。像那个臭名昭著的数据库连接泄露问题,很简单地用一个拦截器就搞定了,还需要千方百计、想方设法吗?借鉴他人成果,减少自己无谓的工作量,提高项目开发效率,降低维护成本,这才最根本的。
分享到:
评论
1 楼 halk 2009-04-16  

相关推荐

    求生之路插件开局给幸存者药丸土制等随机物品

    求生之路插件开局给幸存者药丸土制等随机物品

    土制状态机在工作流引擎中的应用

    这篇文章将深入探讨如何利用“土制”(即自定义)状态机来实现高效且灵活的工作流管理。状态机作为一种抽象计算模型,它能描述系统在不同状态间的转换,非常适合用于处理有固定顺序或条件判断的工作流程。 首先,...

    企业安全生产基础知识.doc

    1. **法律法规遵循**:企业需依据《安全生产法》等法律法规,制定相应的规章制度,包括平安生产责任制度、消防平安、操作规程等,确保各项活动在法律框架内进行。 2. **三级管理和四级台帐制度**:这种管理模式要求...

    论文研究 - 生土的NaOH活化:NaOH含量对干燥动力学的影响及其建模

    这项工作旨在确定氢氧化钠浓度对用生黏土制得的砖的干燥动力学的影响,并对该动力学进行建模。 结果表明,由于缺乏游离水,干燥动力学受水的扩散控制。 干燥时间随NaOH含量的增加而线性增加,而体积收缩率则下降,...

    特种设备述职报告.docx

    3. **专项整治**:针对特种设备数量大、种类多的特点,进行了有针对性的专项整治行动,如电梯维保单位的专项检查、石材行业安全教育整改、内河码头用起重机械整治、土制特种设备的拆除和停用等,有效提升了监察工作...

    洞石系列.pdf

    MCM清水土制木和复古青砖则是洞石系列的补充,它们模拟了木材和古老青砖的质感,既保留了天然材料的特性,又具有良好的耐用性和维护性,特别适合追求复古或乡村风格的设计。 在规格方面,常备的洞石尺寸为230×56,...

    硅藻土制备介孔SiO2气凝胶 (2013年)

    采用响应面法对由硅藻土制取水玻璃的工艺进行优化,进而选择最佳工艺参数在常压干燥下成功合成了SiO2气凝胶材料。试验结果表明:当碱硅比为3∶10,NaOH溶液浓度为10%,反应温度为90℃时,水玻璃模数测定值与SiO2溶出...

    kno3是什么物质的化学名称.pdf

    传统的方法,如硝土制取法,是通过与草木灰的反应来提取硝酸钾。草木灰中的钾离子会与硝土中的钠离子进行交换,生成硝酸钾。同时,草木灰中的碳酸根离子和硫酸根离子会与硝土中的钙、镁离子结合,形成不溶性的盐,...

    吨级生活垃圾资源化处理工程.docx

    废塑料可制成颗粒或板材,营养土制成肥料,废钢铁回炉,建筑垃圾则制成混凝土砌块,实现了垃圾的资源化利用。 此规划考虑了现实需求和长远发展,设计规模与当前垃圾产出量接近,留有余地以应对未来增长。通过最大化...

    不同材料的生态混凝土对污水净化效果的比较 (2011年)

    为比较不同材料所制成的多孔混凝土对有机污水净化的效果,采用了不同的材料来制作3种混凝土反应柱,一为普通硅酸盐水泥与粗砂制作的混凝土,二为复合硅酸盐水泥与粗砂制作的混凝土,三为复合硅酸盐水泥与红粘土制 作的...

    500吨级生活垃圾资源化处理工程.docx

    废塑料可再利用为颗粒或板材,营养土制成肥料,废钢铁回炉,建筑垃圾制成混凝土砌块。这种方式充分利用了垃圾的潜在价值,实现了最大程度的资源回收。 此外,该项目考虑到未来城市生活垃圾的增长趋势,设计规模...

    中职烹饪教师资格证、教师招聘面试试讲教案-调料.pdf

    食糖按制造方法不同可分为机制和土制糖,按色泽分为红糖和白糖两类。 调味料的使用方法: * 调味料的使用方法多样,包括烹饪、腌制、炒、蒸、卤、焖、烧等 * 调味料的使用方法根据不同的菜肴和烹调方法选择合适的...

    小学生森林防火教育PPT课件.pptx

    9. 不使用土制火枪狩猎或烧火驱赶动物,以免引发火灾。 10. 进入山林时,严禁携带火机、火柴等火源,降低火灾发生的可能性。 违反森林防火条例将面临罚款甚至刑事责任,因此,了解法规并遵守规定是每个人的责任。 ...

    山西省大同市浑源县第七中学2020_2021学年高一历史下学期第一次月考试题2021052102133

    3. 西欧封土制:封君封臣制度是西欧中世纪的一种政治制度,体现了封建社会的特点和权力结构。 4. 古代文明的扩张:文明的扩张不仅连接了不同的文明区,也加速了社会的变迁,例如封建帝国的解体,但和平交流并不是...

    高一地理 第三单元 3.7陆地环境的组成 土壤非选择题练习试题 人教版

    18. 海南某地取土制砖的影响:这种行为破坏了土地资源,可能引起水土流失,影响生态环境的可持续性。 19. 黑土区水土流失:东北黑土区的水土流失主要源于坡耕地的不合理利用,加剧了土壤侵蚀,影响土地生产力。 综...

    烟花爆竹打非工作汇报 (2) .docx

    - 土制爆竹因其低价、响亮的特点,仍然有一定的市场需求。 - 爆炸材料(如火药)从外地流入的情况难以完全杜绝。 - 村民和干部主动提供非法生产信息的意愿较低,使得非法生产活动更加隐蔽。 - 经济条件较差的部分...

    初中物理趣味竞赛题.doc

    9. 土质凉水壶的冷却机制:土制凉水壶通过渗透水到外壁加速水的蒸发,从而吸收热量快速冷却水,同时防止水温过低。 10. 保温瓶的保温策略:保温瓶不装满水能更好地保温,因为水面上方的空间减少了热量直接传递,...

    铁路工程特殊岩土勘察规程

    - **极限胀缩性:** 原状土试样或扰动土制样在特定状态下的最大膨胀率和收缩率。 - **前期固结压力:** 土体历史上承受过的最大垂直有效压力。 - **压缩层的计算深度:** 地基土在荷载的竖向附加应力作用下产生固...

    常见易读错的汉字.doc

    “埙”(xūn)是一种古老的土制吹奏乐器,形状类似鹅蛋。“觚”(gǔ)是大型的酒器,而“甑”(zèng)和“甗”(yǎn)是用于蒸煮的炊具。“鬹”(guī)和“龠”(yuè)分别是一种带有喙状嘴和有把柄的炊具,...

Global site tag (gtag.js) - Google Analytics