`

框架为我所用,勿为框架所困

阅读更多
我们已经被框架所包围,我们已陷入了学习之苦。

了解算法,设计模式,语言特性,就可以成为一名合格的程序员了吗?理论上是的,但仅仅如此,却不足以找到一份理想的差事,因为众多的招聘信息上都明确注明,应聘者应当熟悉xx框架,yy组件。

由于长期接受中国式教育,所以我们已经习惯了学习,学习几个框架,对于国人来说也不是什么大不了的事情,然而我们也发现,相对于我们的学习能力而言,我们的创造性显得有些不足,我们有了继承他人的能力,我们也缺乏一种颠覆他人的精神。

谦虚的说,我是一名java的初学者,狂妄的说,我并不比所谓高手差多少,他们不过是多了解一些框架,走的路比我过的桥多一些。

作为一名初学者,这大半年以来在倒腾各种框架,时间有些,虽然无法精通任何一项,还是对一些框架有所了解了。spring,hibernate,struts2,log4j, dom4j 都是很棒的。

作为一个不觉得自己比高手差的人,曾经写过篇《被我抛弃的开源框架》,部分人与我有同感,更多的人对我的这种不尊重他们所推崇的框架的态度表示反对,甚至是愤怒。这几个框架是GWT,TAPESTRY5,STRUTS 1.X,GRAILS, ROR。都是表示层的框架。

此时,鄙人想再次不知天高地厚的批评一下目前两种流行的开发习惯。

1. 使用spring的 HibernateDaoSupport 编写 Dao 代码。

  spring 封装了事务管理,使用 HibernateDaoSupport被迫使用spring的事务管理,当Dao不能正常工作后,很难寻找到问题所在,常见的有lazyload的问题,OpenSessionInViewFilter 的 ReadOnly 的问题。

虽然好奇心驱使我想去了解,他人是如何解决这些问题的,想去彻底学习 spring的事务管理。 但理智的想一下,这根本就是庸人自扰,不使用spring dao,Dao 的问题可能出现在Hibernate的使用上,使用了spring dao,问题可能出现在spring dao的使用上和Hibernate的使用上,既然已经确定问题出在spring dao的使用上,为何不直接使用Hibernate编写dao,自己管理session, ThreadLocal 的模式在80% 的应用中我想都是可以满足要求的。如此一试,发现好处有三:

a, 所有和session生命周期的问题解决了;
b, 代码变得清晰了,以前为了在TestCase中模仿 OpenSessionInViewFilter 还专门写SetUp和TearDown,现在我的session我作主;
c, 性能提升了,对于大批量的CRUD操作,性能至少提高100%。

  spring框架最好用的是它的IOC容器,最大的问题是内容庞杂,太追求面面俱到,细节的学习点多。

  当我们使用他人提供的工具时,最大的弊病是太多的细节被隐藏了,如果像log4j这样的细节无关紧要的工具也就无所谓了,Dao , Service 这样的核心代码,太多细节被隐藏,是很危险的,也许解决一个细节问题的时间,超过了编写一个核心算法的时间,时间浪费在了不能对产品对质量有所提高的地方。此外,如果他人的工具有着设计上的缺陷,或者bug,那问题就更大了。

当然,我们不能抱着对框架完全不信任的态度来对待框架,我想小学生守则上的话能很好的概括我的观点:自己能做的事情自己做。

2. aop

  首先必须肯定,aop真的是很牛B的创意。但我认为,aop 应该是用于解决特殊问题,而不应该作为架构的基础。所谓特殊问题,比如Hibernate的LazyLoad特性,是通过拦截getters实现的,的确是非aop不可以为之。
 
  aop 在架构中也有很多应用,如,权限管理。

  但眼下 aop 颇有滥用之势,如aop文章中经常提到的用于异常处理的aop模式,鄙人就不敢苟同。

  a, 不使用 aop 同样可以做到异常的一致性处理。对于全局的异常记录方式,无论是使用Log4j还是自己编写的Logger,都可以在Logger这一类中得到一致性的控制。对于代码的冗余,可以使用callback模式,比如HibernateTemplate.excute(HibernateCallback)。

  b, aop 会对性能产生影响。

  c, aop 是基于方法拦截的,是基于java语言特性的,不能够放之四海,因此,不宜过于依赖,它应用来实现一些与众不同的功能,而不是解决问题的首先。

  d, aop 限定了对象创建的方式,只能是从工厂模式中创建的对象,或者Ioc容器中取出的对象。

个人拙见,欢迎拍砖。
分享到:
评论
1 楼 LucasLee 2007-05-12  
有一定道理。
不过对于“自己能做的事情自己做”,这句话本身可解释的余地很大,就不讨论了。

目前有点象乱世吧。

相关推荐

    框架知识1所用jar包和js文件.zip

    本资源“框架知识1所用jar包和js文件.zip”包含的是一些基本框架所需的Java档案(jar)和JavaScript文件,这些都是构建Web应用、后端服务以及前端交互的关键组件。 首先,我们来详细了解jar包。Java档案(.jar)是...

    UI框架 界面框架 WEB框架

    "UI框架与界面框架的 WEB 框架解决方案" 在当今的 WEB 应用开发中,UI 框架与界面框架扮演着非常重要的角色。它们为开发者提供了一整套的解决方案,可以快速地开发出美观、功能强大的 WEB 应用程序。本文将围绕“UU...

    如何搭建自己的Java开发框架

    首先,我们需要回答几个问题,以确定我们为什么要写一个框架,什么是我们的框架,谁是我们的用户对象,如何维护和发展我们的框架等等。这一步骤被称为定位。只有在明确了我们的目标和方向后,我们才能开始设计和开发...

    免费漂亮的WPF界面框架

    总之,"免费漂亮的WPF界面框架"结合了FirstFloor.ModernUI的优势,为开发者提供了一个强大的工具,用于构建既美观又功能丰富的WPF应用程序。其自定义字体功能、响应式设计以及丰富的组件库,使得开发过程更加高效且...

    Winform快速开发框架

    总的来说,【Winform快速开发框架】是一个强大的开发工具,它通过预设的三层架构、基类封装、自定义实体和轻量级控件,为Winform应用开发提供了高效的解决方案。开发者可以借此快速搭建应用,减少重复工作,将更多...

    c#winform开发框架

    C# WinForm开发框架是一种基于.NET Framework的桌面应用程序开发工具,它为开发者提供了一套完整的控件、设计模式和架构,使得创建具有丰富用户界面的Windows应用程序变得更加便捷和高效。这款框架尤其适合初学者,...

    SSH2框架搭建实例源码

    SSH2框架,全称为Spring、Struts2和Hibernate2的集成框架,是Java Web开发中的一个常见组合。这个实例源码使用的是Spring 3.2、Struts2 2.3.4和Hibernate 4.2这三个框架的较新版本,提供了一个基础的用户登录和用户...

    xposed框架安装包合集

    这个框架的安装包合集包含了适用于不同Android版本的版本,为用户提供了一个灵活的方式来定制和优化自己的设备。 首先,我们来看一下提供的三个安装包: 1. **de.robv.android.xposed.installer_3.1.1_39.apk**:...

    我公司现在使用框架(框架原代码)

    ”这部分描述表达了对公司所用框架的高度评价。一个被评价为“相当完美”的框架,很可能具有良好的设计、高效的性能、易用的API、强大的功能和丰富的社区支持。此外,它可能还具备优秀的文档,使得开发者能够快速...

    halcon视觉通用框架.zip

    本文将深入探讨名为“MNVVisionCk”的Halcon视觉通用框架,该框架的出现极大地简化了Halcon的使用,并提供了丰富的预封装算子和停靠功能,旨在提升开发效率和用户体验。 首先,我们要理解Halcon框架的概念。框架在...

    C#WPF开发框架源码

    该框架标题为交通建设项目管理信息化系统。 二、功能介绍 1.代码按照三层结构+MVC模式设计。 2.界面展现层采用WPF开发。 3.系统界面采用统一样式定义。 4.界面设计业务代码全面分离。 5.系统设置模块管理。 6...

    c语言-自用的通用AT框架(修改了一些错误)

    之前写NB、SIM、LORA模块程序的时候经常为AT指令头疼不已,用过百度来的AT框架,用过华为的AT框架,用过同事写的at框架。 百度出来的的五花八门,华为LiteOS的AT框架必须配合系统一起使用,同事写的看着最舒服,可是...

    C# Winform通用开发框架

    C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统。此框架没有任何版权限制,支持拿来商用。此框架内部集成了大部分的数据库,可以随意更换数据库,且封装好了所有的实体...

    XPosed框架,原XPosed派大星,目前可用的XP框架

    能在线下载的XPosed框架,支持安卓8以下,ROOT后可一键在线安装。支持雷电模拟器、夜神模拟器、逍遥模拟器、部分云手机以及系统支持的手机。Xposed鸭是一款基于Xposed Installer的修改版软件,他弥补了原版XPosed...

    一种开源业务系统框架winform源码

    同时,提供的教程PPT文件为使用者提供了学习和实施的指导,帮助他们快速上手和有效利用这个框架进行业务系统的开发。 【标签】"框架"指出了这是个开发工具,用于支撑软件结构和实现模块化;"业务"表明此框架适用于...

    c# winform 权限管理框架

    本项目名为“C# Winform 权限管理框架”,它提供了一种完善的解决方案,用于管理和控制应用程序中的用户访问权限。该项目已经在一个全美的公司环境中稳定运行超过一年,这表明了它的成熟度和可靠性。 权限管理是...

    最新SpringBoot框架后台管理模板(带权限控制)

    最新SpringBoot框架后台管理模板 本SpringBoot框架采用零xml配置,全部动态启动、支持热部署 框架结构清晰明了! 框架管理:maven 框架: 1.核心框架---------Spring-boot 2.数据源框架-------mybatis、HikariCP...

    移动端H5 UI框架

    移动端H5 UI框架是开发移动应用网页界面的重要工具,它为开发者提供了预设计的组件、样式和布局,以便快速构建美观且响应式的用户界面。在本文中,我们将深入探讨这个主题,了解H5 UI框架的基本概念,以及如何利用...

    Saas框架实例(.net)

    本实例以".net"为基础,提供了一种用于创建多租户SaaS应用的解决方案。 标题中的“Saas框架实例(.net)”指的是一种基于.NET技术的SaaS开发框架,这个框架设计的主要目标是帮助开发者快速搭建能够支持多个租户同时...

    一个AT指令解析框架,mark一下

    AT指令解析框架是一种用于处理和解析AT(Attention)指令的软件工具,广泛应用于通信设备,如GSM/GPRS模块、蓝牙模块、Wi-Fi模块等。AT指令是串行通信中的控制命令,允许用户通过简单的文本命令与硬件进行交互,设置...

Global site tag (gtag.js) - Google Analytics