框架轻重之我见

目前,看到在OSC中,不少人在写框架,比如:JFinal,比如Smart ,比如Hasor等。

可能大家都集中在一个轻量上作文章,这里我想就轻重做自己的一点感想,不一定正确,就当扔个砖出来,大家请放心大胆的抛玉出来,一起讨论。

曾几何时,Spring之横空出世,大家都是欢呼雀跃,为啥呢?因为Spring轻量。为啥轻量呢?看看EJB就知道了。那为什么EJB就重了呢?主要的原因就是大家必须围绕着EJB转,如果离开了EJB,就玩不转了。这个重就体现在,开发模式与EJB绑定之谓重,运行环境与EJB环境绑定之谓重,对EJB深度依赖之谓重。

而Spring当时为什么就轻了呢?当时Spring的采用了无侵入式设计,从而使使用它的人感觉不到它的存在,但是又能享受到它的好处。所以,就如一楼春风吹向广大深受EJB荼毒的程序猿们,于是Spring火了,Spring得到了非常大的应用与推广,甚至可以说占据了统治地位。

鄙人和Smart作者黄勇也通过QQ沟通过,感觉他的思想、理念都非常不错。看了哈库纳的博客,也为他的一些想法所惊叹。

稍有不同的是对轻量级框架的理解稍有不同。在以上作者的理解中,都期望依赖尽量少的框架,框架的容量尽量小。说实际的,这个目标也是本人所追求的。实际上,所有期望做平台的人,也都会这么想,毕竟:完成同样的功能,为什么不用更小的呢?更小的代码一般来说都代表性能更高,维护量更小,里面的遗漏缺陷更少。

但是,在另外一个方面,我也看到了以上三个框架都大量的采用了注解来实现相应的功能。注解与XML各有优缺点,这个道理大家都明白,注解之优势在于浑然于一体,XML之优势在于无侵入性,工具的可处理性更强,等等。

曾经有一个朋友给我留言说:你的Tiny框架依赖了Spring,就不可能是“tiny”的框架了。这在一定程度上也代表了相当多的人的一种观点。

在此我给出我对于轻量级框架的定义:

所谓轻量级框架,就是能帮使用框架者解决尽可能多的问题的同时,尽可能少的对使用者构成侵入性影响。

如果非要给出一个公式的话,那就是:轻量系数=解决的问题/侵入程度

说的通俗一点就是,你给人家解决的问题越多,而对人家造成的干扰越少,那就越轻量。

每个框架构建者可能都要考虑这样一个问题,如果有一天,别人的项目要向你的框架迁移,需要付出多少的迁移成本?如果有一天,使用你框架的项目要向别的框架迁移要付出多少成本?

实际上,这两项的成本不太可能为0的,但是应该尽量的小。如果说,不管怎么样,这两项的工作量都非常大,那你这个框架就不能算是轻量级框架。

再换句话说如果,这两个成本比较高,别人在决策的时候,就会非常小心,除非不得已,不会使用你的框架,或者不会迁移到你的框架上来。

所以,框架轻重之我见,判定的标准与jar包大小无关,与依赖的第三方包的大小多少无关,只与框架能解决的问题的能力及侵入程度相关。

时间: 2024-09-17 10:48:43

框架轻重之我见的相关文章

【Spring】Spring框架之我见

[导图俯瞰全篇]   一,框架介绍:           1,先看一下帮助文档的这张图,里边主要包括了Spring自身的功能,还有可以和其框架结合的一些框架,通过这张图可以看出,Spring框架和其他框架的集成能力是非常强的 2,Spring是一个轻量级的IOC和AOP容器框架:                  a,轻量级:程序实现不是很复杂,代码不是很多,占用资源不是很多,没有侵入性:                  b,IOC(Inversion of Control 控制反转):对象创

应用程序框架实战十三:DDD分层架构之我见(转)

前面介绍了应用程序框架的一个重要组成部分--公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构,使用单层架构和普通三层架构一样可以,不过你如果希望获得更进一步的复用性和封装度,使用更加面向对象的技术是必经之程. 我在2010年以前还在使用古老的ASP.NET WebForm和原始的Ado.Net.之前我有个观念:.NET技术发展太快,跟着微软屁股后面跑太累,所以只使用它一些原始的东西,自己封

关于持久层能不能出现多个持久层框架,比如ibatis,jdbc

问题描述 关于持久层能不能出现多个持久层框架,比如ibatis,jdbc 开发有时候会用到多数据库建立数据库连接池的情况,就是想问下,会不会也同样有多个操作数据库的框架共同或者切换使用 解决方案 可以出现.我见过mybatis和hibernate一起使用的,mybatis做一些复杂sql,hibernate做一些简单的对象增删改 解决方案二: 我没遇到过多个持久层框架同时使用的 解决方案三: 我觉得如果有,就要有多个配置,到时候该怎么切换呢 解决方案四: 是可以,不过这样做太麻烦了,也浪费空间.

一套较完整的技术框架

一套较完整的技术框架 转载自http://blog.csdn.net/phenixiii/article/month/2007/11 1 引言 1.1 前言 本文将基于目前现有的软件开发架构(以下简称'架构')(Packer for Delphi),同时如何合理地引进新技术等问题,进行系统地分析和研究,以指导新架构的研发. 1.2 研发依据 1.2.1 公司发展 1.2.2 开发方式 1.2.3 技术升级 1.2.4 产品线 行业领域软件需要个性化的服务,如果对应以作坊式的开发方式,将会陷于项目

JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember

原文地址: http://www.ituring.com.cn/article/38394 选择JavaScript MVC框架很难.一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思.想知道有哪些JavaScript MVC框架可以选择?看看TodoMVC吧. 我用过其中4个框架:Angular. Backbone. CanJS和 Ember.因此,可以对它们作一比较,供大家参考.本文会涉及框架选型过程中需要考虑的一系列因素,我们逐一讨论.   每一个

struts action取数-Java Struts2 框架页面传参问题

问题描述 Java Struts2 框架页面传参问题 strut2 中 可以在action中 将页面参数封装成对象 如果我的对象包括属性对象 的集合(List) 要怎么配置才能自动封装呢 解决方案 把页面参数封装成对象,这是有限制的.一般只能封装成含有基本数据类型属性的对象,集合类型需要自己去单独处理. 解决方案二: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传的值呢 谢谢 解决方案三: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传

为什么我不再用 .NET 框架

.NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的所有可能性. [系好安全带:这个文章的长度几乎成了一本书-] 优点 首先让我开始说说.NET做得对的许多事吧,尽管这其中的大多数并不来自.NET本身,但却是由.NET社区而来. C# C#令人惊叹.我认为它是一个令人惊叹的编程语言.从强大的C语言背景而来,我彻底地喜欢其语法,流和这门语言的所带来的

架构师速成6.4-开发框架

经历了很多公司,看过好多代码.传统行业公司普遍都有自己一套统一的开发框架,封装的非常傻瓜化,门槛极低,便于不同的项目快速开发上线.比如有一个银行业框架封装到开发人员只需要在界面上拖拽就完成大部分工作,然后在拖拽好的模块里面添加一些业务代码就ok了.用友,华为也是类似.当然传统行业缺点是,一套框架用n年,老掉牙了也在用,有时候跟不上时代. 小的互联网公司有时候就不太注重,基本就以快速上线为主,草草完成功能就可以了.阿里巴巴在开发框架封装方面做的也不是很好,跟发展历史有关,也跟商业驱动有关,这个就不

框架研究(QQ群)第一次的讨论记录(07-05-17)

2007-05-17 17:50:47 Ivony...近期我会公布DbUtility的两个应用实例-- 2007-05-17 17:51:37 jykDbUtility 是什么来着 2007-05-17 17:52:31 Ivony...一个是怎样使用模板功能查询指定时间段内数据.由于查询数据的SQL比较复杂,如果将时间段直接嵌入其中,必然让SQL变得像裹脚布,我们用DbUtility提供的SQL模板功能非常漂亮的解决了这个问题. 2007-05-17 17:52:44 Ivony...DbU