`
xihongshi414
  • 浏览: 35886 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

框架之争——JAVA给我们带来什么

阅读更多

J道 hgwnet:

      框架框架,框框太多,甚至厌恶这些框架发起人作为程序员的呆板。性能优异要是就算了,但在追求大而全的情况下看不出哪个所谓主流框架非常满足作为web所需的敏捷。看看所谓的组件框架Struts,webwork,一大堆的所谓i18n组件简直就是画蛇添足。看看某国外最新的论坛系统,由于采用了webwork,系统简直就是慢如蜗牛。
      再说tapestry,组件化思想贯穿整个系统设计,无疑走在潮流的前端,同时众多组件也基本可满足日常开发,更可贵的是,它的性能比webwork还好,更不用说JSF了。但它的缺点也很明显,框框太多。也不知道那个大胡子是怎么想的,为了追求框框的完美,本身可3.0可简单获取HttpServletRequest控制权的,4.0非要你手动注入request服务,这简直就是在颠覆框架易用性的本质!当然了,若你要走组件化开发道路,还是得用tapestry,否则JSF,Tubine,webwork之流总有一天会把你搞垮。与其被框死,还不如自己搞个自己的框架。我现在就用自己的纯jsp框架,什么Form validator、i18n、actions样样都有,开发起来敏捷不说,而且性能跟单纯的jsp无异,爽。

 

zhaoping_yu:

      我对hgwnet老兄的观点颇有同感。我们公司接触使用Struts可以说是比较早了(大概是从Struts刚推出不久就开始了)。当时Struts也比较轻型,其对MVC的实现确实给我们WEB项目的开发带来很大的方便。但Struts后继版本的发展,我们对其的使用反而越来越不方便了、代价越来越高。

      首先是Struts本身越来越庞大,原因是它想包含的功能越来越全(如果只是扩展表现层必须的功能也就罢了,可它为什么把数据库等有关的功能也考虑进去啊(我当时用的版本是这样的,其最新的版本是不是还考虑,我没有考察)),导致我们的WEB应用越来越慢,员工的学习曲线越来越陡。它提供了那么多TAG,我们大部分用不到,而且我们需要的它又没提供(或至少不是太对口)。于是我们公司就根据Struts实现MVC的原理实现了自己的MVC框架,它只考虑实现了MVC最基本的东西,相关的代码才十几K,用它替换原先的Struts后,经过相关测试,给我的感觉就象一个人脱掉笨重的外套一样。后来我们公司就一直用这个框架,也没发现对其还有太多的扩展需求。由于这个框架对我们公司来说已经够用了,在Struts后面出现的其他MVC模式框架,我们公司也没有对它们进行跟踪使用。
      我写这个并不是排斥使用各种编程框架,相反,如果有好的框架当然要拿过来使用;如果当前的框架对公司目前的项目够用就行了,也没必要去盲目地追求新的框架;使用框架还要考虑学习成本。我们对框架实现者的要求是,开发框架时一定要考虑框架的功能定位,不要去追求大而全的东西。我们需要的是定位准确、容易学习和使用、轻量级的框架。

 

banq:

      zhaoping_yu非常有道理,这也是所谓行业框架的诞生原因,也许我这个行业的表单界面都不复杂,那么我就不可能用到Struts那么全面的功能,相反,自己做这样一个轻量框架反而适合自己,和穿鞋的道理一样的。
      我认为这也是Java世界与.NET的最大区别,我这里不想引起两者讨论,我看到很多比较文章,它们都是从技术上进行一对一比较,其实这没意思,缘木求鱼,Java提供给我们不只是用工具,还有自己编写自行解决工具的能力,这方面能力要比.NET世界以M$为主的软件要强多。我这里只是提一下,不想引起比较讨论。

 

zhaoping_yu:

      容我再补充两句吧。
      再次郑重声明,我们并不排除使用现有的各种框架,更不主张自己非要重新开发“适合自己”的框架,相反如果有好的框架我们会很乐意使用的(我们更乐于把自己的主要精力放在自己业务的开发上,我们公司用过的框架:webmacro、village、ecp等想必大家有的都没听说过吧?我们对Struts还是非常赞赏和喜爱的),我想表达的观点是:
①、如果要适合自己的框架,一定要毫不犹豫地拿过来用,而且一定要踏踏实实地把它用精、用熟。
②、不要盲目追求技术潮流,只要是当前的框架够用了,就不要再去追求“更好”的。要知道,作为一个公司,如果重新换另一个框架,就要对整个技术团队进行重新培训、学习、重构和维护等等,成本太大了。
③、如果当前的框架实在满足不了项目的需要,可以考虑对当前的框架进行“重构”(我想这也是开源项目的优点吧),前提是你必须对这个框架首先要用精用熟。
所以我们对框架的要求是:框架只做它应该做的事(并做好),但要允许我们应用开发者根据需要对其做适当的适配和扩展,而不要做一个大而全的东西,用来满足我们各种各样的需求。

④、框架应该象模式一样,从实践中来到实践中去,只有从实践中提取出来并放到实践中去检验它,适合自己项目的框架就是好框架。不要泛泛地光从“技术”层面去讨论它们的好坏,要知道一个框架被提出来肯定有它的存在的基础和道理的。
⑤、当然,如果刚开始选用一个框架时,确实需要在目前现有的同类框架中进行对比比较,从中选一个最好的。但是在选择时不要只考虑技术因素还要考虑其他因素,比如:我们公司是否有这样的人员、技术储备?这个技术是不是对我们这样的小项目来说大材小用了?其维护性如何?等等。

      我自己从事这么多项目的体会是:除非万不得已,不要轻易自己动手写框架,那是一件极痛苦且出力不讨好的事情。现在,在开展一个项目的过程中,每当有人提出要针对本项目做一个框架或类似通用的东西时,我都极其害怕并竭力阻止,结果,大家讨论来讨论去,最后总能从现成的东西中找到比较合适的。
现在我常挂在嘴边的一句话是:最好是好的敌人!

 

分享到:
评论

相关推荐

    《精通NetBeans——Java桌面、Web与企业级程序开发详解》光盘

    《精通NetBeans——Java桌面、Web与企业级程序开发详解》是一本专为Java开发者设计的深入指南,它详尽地介绍了如何利用NetBeans IDE进行高效且高效的编程工作。NetBeans是一个开源的集成开发环境(IDE),广泛用于...

    《面向对象程序设计——Java语言》电子课件(程细柱PPT)

    《面向对象程序设计——Java语言》是一门深入探讨如何使用Java进行面向对象编程的课程,由知名讲师程细柱制作的PPT电子课件。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中的核心编程范式...

    神经网络算法与实现 ——基于Java语言 代码实例

    《神经网络算法与实现——基于Java语言 代码实例》是一本深入探讨神经网络编程的书籍,专注于使用Java语言实现各种神经网络模型。本书通过实际的代码示例,为读者提供了理解神经网络工作原理以及如何在Java环境下...

    个人生活助手——java

    在这个名为“个人生活助手——java”的项目中,我们显然看到了Java技术在构建一个全面的个人服务应用上的运用。下面将详细介绍这个项目可能涉及的Java相关知识点。 1. **Java Web开发**:该项目很可能是基于Java ...

    Java之SSH深入浅出——精简剖析

    ### Java之SSH深入浅出——精简剖析:Struts框架详解 #### Struts框架起源与发展历程 Struts框架,作为Apache Jakarta项目的重要组成部分,自诞生之初便承载着推动JavaServer Pages(JSP)、Servlet、标签库及面向...

    1003————自动搭建SSH框架 1004————SSH框架手动搭建

    在IT行业中,SSH框架是一个非常重要的概念,...这不仅能够帮助我们更好地使用SSH,还能够为其他类似的Java Web框架的学习打下坚实的基础。同时,熟悉这些框架的配置和使用,也有助于提升我们的项目开发效率和代码质量。

    堆方块,源码——JAVA ME

    【描述】虽然描述很简洁,但我们可以推测,"堆方块,源码——JAVA ME"可能是一个简单的堆叠游戏,玩家需要在有限的空间内堆叠方块,以获得尽可能高的分数。Java ME的源代码会包含游戏逻辑、用户界面、碰撞检测、得分...

    毕业设计——JAVA语言设计(论文+源码)汇总-共79份.zip

    毕业设计——JAVA语言设计(论文+源码)汇总,共79份。 JAVA物业管理系统设计与实现 超市综合管理信息系统 基于J2EE的B2C电子商务系统开发 基于JAVA CS远程监控系统软件的实现 基于Java ME无线网络移动端的俄罗斯...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    JXTA——Java P2P网络编程技术.zip

    通过《JXTA——Java P2P网络编程技术》这本书,读者可以深入理解JXTA框架的原理和应用,书中可能涵盖了如何设置开发环境、建立Peer Group、创建和管理Pipe、实现资源发现和交换,以及如何实施安全策略等内容。...

    EJB开发——Java 2 SDK.rar_java ppt

    【描述】"JAVA程序的PPT教程" 提示我们这份资源是以PPT形式呈现的Java编程教程,可能包括了基础到高级的Java编程概念,特别关注的是EJB这一部分,它是Java平台中用于构建分布式企业级应用程序的关键技术。...

    JBuilder 9程序设计——Java程序员成功之路

    《JBuilder 9程序设计——Java程序员成功之路》是一本专为Java开发者设计的指南,尤其对于使用JBuilder 9这一强大的集成开发环境(IDE)的用户来说,它提供了全面而深入的学习路径。JBuilder是Borland公司推出的一款...

    支付示例源码——java

    "支付示例源码——java" 提供的是一套用于调用支付宝API的Java代码示例,对于开发者来说,这是一个宝贵的资源,可以帮助他们快速理解和实现在线支付功能。 首先,我们需要了解Java在支付接口中的作用。Java作为一种...

    图书管理系统——JAVA

    【图书管理系统——JAVA】是一个基于Java编程语言开发的软件应用,主要用于实现对图书信息的高效管理和操作。在本文中,我们将深入探讨这个系统的几个关键知识点,包括系统设计、主要功能、技术栈以及如何通过Java来...

    RsMaker-基于rust的免杀生成框架.zip

    RsMaker——基于rust的免杀生成框架.zipRsMaker——基于rust的免杀生成框架.zipRsMaker——基于rust的免杀生成框架.zipRsMaker——基于rust的免杀生成框架.zipRsMaker——基于rust的免杀生成框架.zipRsMaker——基于...

    华为P40安装谷歌框架步骤1——backup.rar

    1、文件管理——长按压缩包——更多——解压至——内部存储——选择目录——Huawei(位置在中间偏下)——勾选右上方对号——查看 2、设置——系统和更新——时间和日期——自动设置关闭——日期——调节至2020年...

    仓库管理源代码——JAVA程序设计

    《仓库管理源代码——JAVA程序设计》是华中科技大学一项四年的课程设计项目,旨在让学生通过实际编程经验,深入理解仓库管理系统的设计与实现。在这个项目中,学生将使用Java编程语言,结合数据库技术,构建一个完整...

    图书馆管理系统——java源代码

    《图书馆管理系统——Java源代码详解》 在信息技术日益发达的今天,图书馆管理系统的开发与应用已经成为提高图书馆工作效率、优化服务的重要手段。本篇将详细解析一个基于Java语言编写的图书馆管理系统,帮助读者...

    java毕业设计——java+mysql crm客户关系管理系统.zip

    "java毕业设计——java+mysql crm客户关系管理系统.zip"这个标题表明了一个基于Java技术的毕业设计项目,该项目的核心是构建一个CRM(Customer Relationship Management)系统,利用MySQL作为数据库来存储和管理客户...

    MLDN——Java Web 开发实战经典源码笔记(基础篇)|

    《MLDN——Java Web开发实战经典源码笔记(基础篇)》是一本专注于Java Web开发的实战教程,旨在帮助读者从零开始掌握Web应用的开发技术。这本书通过深入浅出的讲解和丰富的实例代码,全面介绍了Java Web开发的基础...

Global site tag (gtag.js) - Google Analytics