谈到应用开发就一定不能不谈到框架,几乎每种语言都有他们自己的框架组件。就连以灵活性著称的脚本语言,Ruby,Python也呈现出了大量开发框架。面对如雨后春笋般涌现出的框架,人们有感于选择如此之多,于是出现了不少“框架都是差不多的”说法。
一个有若干年经验的开发人员一定说过这样的话:“框架都是差不多的”。这话不错,而且说这话的同时那人脸上多半带着一些饱经世故的表情。老子曾说:“为道日减”,东西学到了一定程度就会进行总结、归类,发现其中相同的东西。就好比我们评判一个人的运动能力的时候,会笼统地说道协调性、力量、耐力这些技能指标。但是在谈到不同的运动项目时,他们需要的却是完全不同的技巧和规则。显然你不能把游泳比赛的规则放在自行车比赛上面。所以老子另外还说过“为学日增”,就是告诉我们:即使掌握了原理,也不要放弃学习各种新东西,新技巧,掌握它们的不同之处。既善于总结归类,又善于推陈出新,可立于不败之地。
比如说表单参数接收的问题,所有的Java框架都有定义了自己的参数接收的方法。参数接收的总的过程不外乎就是类型转换、对象转换。那它们有什么区别呢?
Struts2在接收参数时偏向于使用控制类的数据对象来接收,Struts2有一种ModelDeiven的接口,直接将提交的数据贯穿于request和response生命周期的始终,这体现了Struts2的重要思想:屏蔽应用程序对servlet API的依赖,使代码更加偏向业务,更加方便单元测试。但是Struts2这种做法的缺点也是显而易见的,为了使控制类完全脱离servlet做了大量的反射封装,降低了性能。成员变量式的参数接收有可能出现变量的生命周期问题,而且还要占用大量的堆内存。
SpringMVC在做参数接收时就明智些,它保留了servlet的API,同时提供了像Struts2那样的对象接收参数方式。不同的是SpringMVC使用方法的入参来接收参数,不仅可读性非常良好,而且也没有生命周期和堆内存占用的问题,不用写任何注解和配置,简单的按参数名匹配即可。这体现了Spring的重要思想:提供各种优雅的方案供开发者选择,而不是规定某一种方式让开发者去被动接受。同时这种简单的按名字匹配的方法也体现出了新的技术潮流:配置优于编码,约定优于配置。
当然聪明的开发者们肯定想到可以自己做一个BeanUtil来解决上述问题。但是你的util能否注入name="userList[0].userName"这样的复杂属性呢?这是一种很常见的表单注入类型,主流的MVC框架基本上都支持这样的属性注入。
在这个框架纵横的年代里,你一定还记得那些远古时代的servlet和jdbc代码:
[java] view plaincopy
XX.setXXX(request.getParameter(“XX”));
XX.setYYY(request.getParameter(“YY”));
…………
try{
<span style="white-space:pre"> </span>conn.openTransaction();
ResultSet set=conn.prepareStatement(“……….”);
xx.setXXX(xxxx)…………..
tansaction.commit();
}catch(e){
tansaction.rollback();
}finally{
conn.close();
}
不要以为这种写法已经绝迹了,现在它一定还在你的项目的某个角落里发挥着“旺盛的生命力”,并且在你需要维护功能时突然出现把你弄得哭笑不得。如果这种写法已经泛滥,维护人员将会有一种“自挂东南枝”的冲动。
有一类很聪明的程序员,他无论是用什么框架都可以找到获取jdbc connection的方法,然后接着写他们“万变不离其宗”的代码。还要美其名曰“性能优越”。这种人我认为应该去写汇编才能充分展示其卓越的才干。
软件行业之所以会出现开发框架,绝对不是为了提高性能——其实框架的应用反而是降低系统性能的。框架的出现是为了简化开发的工作,让开发把更多的精力集中到日益复杂的需求上来。程序员的时间比机器的时间更宝贵:从项目管理的角度说程序员的工作量是按天来计算的,他们对时间的运用直接关系到项目的进度、上线时间等关键性问题。机器的时间是按毫秒来计算的,一个几百毫秒的改变对机器来说已经是非常大了,但是对用户来说这真的会更重要么?
当然这不是说完全不考虑性能,性能问题可以通过后期调优,硬件升级,从代码、设计、实施甚至是需求多个方面去解决。而一个项目的扩展性健壮性,则是从一开始就大部分决定了的。因此,开个技术启动会普及一下技术规范是绝对有必要的。
“无规矩不成方圆”,对随意性极高的软件行业来说:“无我”式的编程、充足的代码规范及其审核,是提高软件质量降低开发成本的不二法门。
相关推荐
三大框架面试题 本文档总结了 Hibernate、Struts 和 Spring 三大框架的面试题,涵盖了这些框架的工作原理、延迟加载、关系映射、MVC 设计模式、IOC 和 AOP...JSF 是基于组件的 web 开发框架,跟 Struts 差不多的框架。
3. **Spring框架**:Java应用开发中常用的框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,简化了应用的开发和维护。 4. **RESTful API设计**:用于实现客户端和服务器之间的交互,定义清晰、无状态...
C#是一种面向对象的编程语言,由微软公司开发,广泛用于创建Windows桌面应用程序、Web应用程序以及游戏等。VS2008是微软发布的一个版本,提供了开发.NET Framework 3.5应用的支持。 “Notepad08”这个压缩包子文件...
Java 平台的学习可以分为三个阶段:java 基础阶段、数据库阶段和 web 开发阶段。 java 基础阶段 1. Java 语法:java 语法基本语法和 C 语言、C++ 类似,没有什么太大的区别!都是一些基本的面向过程的程序设计。...
网页前端开发是当今最为流行的职业之一,自07-08年正式出现以来,已经发展了差不多三四年的时间。这个领域没有学校的正规教育,没有行内成体系的理论指引,几乎所有从事这个职业的人都是靠自己自学成才。 在这个...
Spring5 是一个重要的版本,距离SpringFramework4差不多四年。在此期间,大多数增强都是在 SpringBoot 项目中完成的。在本文中,我们将很快了解到Spring5发行版中的一些令人兴奋的特性。 1. 基准升级 要构建和运行...
JavaScript是一种广泛应用于Web开发的脚本语言,尤其在前端领域,它是构建动态、交互式网页的关键工具。这个“常用JavaScript特效代码Api文档”包含了大约1000个左右的代码片段,涵盖了各种常见的JavaScript特效和...
实习的目的和要求 实习目的:毕业实习是一个重要的综合性实践环节,旨在培养学生综合运用所学知识和技术,针对具体应用问题,进行分析、设计和解决问题的能力,拓展学生的知识面,练习和掌握新而实用的开发技术,为...
1. **ASP.NET**:ASP是ASP.NET的一部分,后者是微软的Web应用程序框架,用于构建动态网站、Web应用和服务。开发者可以使用C#或VB.NET等语言编写代码,结合ASP.NET控件和功能,实现用户交互和数据处理。 2. **SQL ...
而“c#”是.NET框架下的面向对象的编程语言,用于构建Windows桌面应用程序、Web应用和服务。因此,我们可以推断这个计算器程序是用C#语言在Visual Studio 2005环境下编写的。学习这个源代码将涉及到C#的基本语法、...
2.设计模式是比 J2EE 等框架软件更小的体系结构,J2EE 中许多具体程序都是应用设计模式来完成的,当你深入到 J2EE 的内 部代码研究时,这点尤其明显,因此,如果你不具备设计模式的基础知识(GoF 的设计模式),你很难...
C#是微软公司推出的面向对象的编程语言,它具有丰富的类库支持,适用于开发桌面应用程序、Web应用程序以及游戏等多种类型的应用。 在描述中提到,“一个用C#做的简单的记事本程序,与WINDOWS操作系统的记事本程序...
Java作为一种广泛应用的编程语言,其学习路径涵盖了基础知识、进阶技能和实战经验等多个方面。以下是一份详细的Java学习路线指南,帮助你系统地掌握这门语言。 首先,从基础知识开始。你需要了解计算机科学的基本...
综上所述,C#记事本项目涵盖了多种C#编程和Windows桌面应用开发的关键技术。通过分析和学习这样的源代码,开发者可以加深对C#语言特性和.NET Framework的理解,提升自己的编程技能。在"我的记事本"这个源代码中,...
通过这个【人事管理项目】的学习,不仅可以掌握编程语言和框架的应用,还能深入了解人事管理的业务流程,提升软件工程的实践能力。对于初学者而言,这是一个很好的动手实践平台,而对于有一定经验的开发者来说,也是...
* XML&Web服务:双培生必修课(双培生和北邮生都能选),双培生选课的时候没选上不用着急,老师会通过后台给你们加上。 * 软件需求工程:此学科属于软件工程生命周期模块选课,如果没选上的话老师你可以试着求老师给...
Metronic是一个知名的前端开发框架,它提供了多种预设计的模板,旨在帮助开发者快速构建高效、响应式且具有专业外观的Web应用程序。 这款经典模板在Metronic系列中脱颖而出,主要体现在以下几个方面: 1. **响应式...
C#是一种面向对象的编程语言,广泛用于构建Windows桌面应用、游戏以及现代Web应用。由于其丰富的类库和强大的.NET框架支持,C#成为开发此类即时通讯软件的常见选择。 在描述中提到“效果还不错,跟真的差不多”,这...
Spring框架是Java开发中的核心工具,它提供了依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)等特性,有助于简化应用程序的复杂性。在这个项目中,Spring被用来管理CXF服务的生命...
项目中使用了第三方的组件,如《融云IM》,《微信SDK》,《ping++》,《百度地图》等,具体这些的框架代码就不提供了。 作者介绍 软件工程研究生,2017年毕业于华东师范大学,现在就职于华为,热爱新技术,热爱编程...