`
cantellow
  • 浏览: 842608 次
  • 性别: Icon_minigender_1
  • 来自: 草帽海贼团
社区版块
存档分类
最新评论

开源web框架Rose开发初感

    博客分类:
  • web
 
阅读更多

 

Rose 是由 人人网糯米网 提供的、基于Servlet规范、Spring“规范的开放源代码WEB开发框架。

Rose的开源地址是:http://code.google.com/p/paoding-rose/

本文不打算为您详细介绍Rose,而且假设你已经对Rose已经有一些了解,本文的中心是自己初次接触Rose后的一点感言。

作者眼中的Rose哲学

  • 基于IoC容器 (使用Spring 2.5.6)
  • 收集最佳实践,形成规范和惯例,引导按规范惯例,简便开发
  • 收集通用功能,形成一些可使用的组件,提高生产效率
  • 特性的插拔,使用基于组合而非继承的设计
  • 提供可扩展的点,保持框架的可扩展性
  • 注重使用简易性的同时,注重内部代码设计和实现

我对Rose的理解

一句话

基于spring的组件框架,推崇页面驱动和约定优于配置。

Rose中的controller是什么?

你可以简单的把它理解为MVC模式中的controller,但它的意义远不止于此,Rose中的Controller可以说把页面驱动和约定优于配置表现的淋漓尽致,它扮演接收处理web请求职责的对象类,接收web请求传入的参数、调度服务处理业务、将处理结果设置到model中,返回一个指示(页面)

一个好的web开发框架是什么?在我认为,那就是利于理解(MVC模式)和维护、快速响应开发需求、提高开发效率以及不俗的性能表现。

简单来说,controller代表一个用例中的角色,而它的action方法则代表角色的行为,它使开发人员把精力更加注重业务逻辑的实现。

举一个简单的例子,相信很多网站都有用户注册和登录等功能,下面是其用例图:



 那么URI设计为(一种可能的方案):

修改信息

user/${userId}/update

登录

user /login

注册

user /register

修改密码

user /${userId}/updatePsw

退出登录

user/logout

从上面我们可以一眼看出,这个controller接收这些请求都是围绕着user这个角色,所以我们抽象出UserController这个对象,而它所产生的行为(URI)正好对应各个action方法。

另外,从命名规则上看,作者建议controller类采用名词,action方法采用动词,这的确是一个不错的实践。

OK!我们只要再写几个页面就可以简单的把这个请求框架搭起来,接下来我们将大部分的精力就放在loginregister等业务逻辑的实现,很显然,这提高了我们的开发效率。

 

到这里,你肯定要问,写好了controllerRose是怎么将实际的请求映射到action方法的呢,这之间肯定有一个约定,这个约定就是请求的URL和所在controller包路径、controller类名称、类自定义uri path注解、action方法,method注解以及注解中的uri匹配参数(具体的匹配规则这里不再赘述)息息相关,这里是Rose的精华所在,也是体现约定的精华所在。

但在技术上,要找到特定action方法,肯定免不了使用反射来达到这一目的,但使用反射会不会对Rose框架的性能有什么大的影响呢?(作者说“我们 有办法 通过在运行时自动进行代码增强包装成Command而不使用类反射来实现目的”,不太明白这句话的含义,望高人指示!)。

实际上,在Rose启动时,Rose会“浏览”controller类和其action方法以及两者相关的注解,形成一个Rose匹配树,这个匹配树的形成意味着Rose已经把所有URI映射规则以及尽可能做的事事先做好(包括对method方法名以及相关要素的缓存),使Rose在服务状态时,不用再通过类反射来做和类、方法有关的识别和判断,直接就可以从缓存里获取method对象以及相关的其他要素进行处理。这是使用空间来交换时间的最佳例证,在服务状态完全不使用反射也是不可能的,比如运行时访问开发者自定义的action方法肯定要通过method.invoke方法调用(对于代理对象的,使用Proxy来调用),还有就是在提交表单时,如果action方法参数是一个POJO,那么就需要通过反射将表单里的值动态设置到这个Bean属性中。

Rose眼中的MVC模型

根据MVC的定义:

 

  • (控制器Controller- 负责转发请求,对请求进行处理。
  • (视图View - 界面设计人员进行图形界面设计。
  • (模型Model - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)

Rosecontroller可以理解为MVC中的CJSPvelocity可以理解为view,那么model呢?这部分通常是调用业务逻辑充血对象或者自己实现相应的service ,这也是开发人员最应该关注的地方。下图是Rose眼中的MVC,画的比较简陋:



 其中的invocation对象应该引起你的注意,作者对invocation下的定义是:

“通常意义上的“Invocation”是指一次调用,特别地是指对方法的一次调用,是对一次调用的抽象与封装,比如包含了调用的输入参数、被调用的对象与方法等等。

Rose框架下,最终的处理者应该是某个控制器方法,与之相关的还有参数解析器、验证器以及知名度较高的拦截器。为了封装与一次请求处理相关的数据,我们设计了一个Invocation类来表示。”

 

Rosefilter

Rose的入口是net.paoding.rose.RoseFilter,在它背后是一个责任链,采用filter的好处是更加灵活,servlet的映射比较笨拙,一旦处理不了,Servlet规范没有提供机制使得可以由配置在web.xml的其他正常组件处理 (404500等错误处理组件之外)

采用filter的另一个好处是,用作者的话来说,Rose可以很好地和其他web框架兼容。它能够优先处理认定的事情,如无法处理再交给其它FilterServletJSP来处理,这在改造遗留系统、对各种uri的支持具有天然优越性。正是使用过滤器,Rose不再要求请求地址具有特殊的后缀。

 

拦截器

先来一个简单的推理,某些uri需要做权限设计,一般是在“特定的条件”下才能访问这个uri,根据Roseuri映射规则,一个uri对应一个action方法,也就是说我们需要标识在“特定的条件”下才能访问这个action方法。

为了更加准确模拟现实世界中这样的约定,我们用注解来表示“特定的条件”,一般这样的注解没有值,只是个标签,它的职责是“表明”,至于表明之后做什么,由拦截器来实现。

比如有些uri需要登录之后才能访问,首先定义@LoginRequired来表示“需要登录”,然后把它放在你认为需要登陆之后才能访问的action方法上(放在类上表示其所有的方法都生效),接下来写一个拦截器,用来实现在访问标识“@LoginRequired”的action方法之前,检查用户是否登录,如果登录则继续执行,如果没有登录则重定向到登陆页面。

==========================================我是分割线===================================

第二支程序作者并没有提供完整的实现,而且也有很多笔误,附件是我对这支程序完整的实现,主要的地方点到为止。

 

  • 大小: 23.7 KB
  • 大小: 24.6 KB
  • lib.rar (7.1 MB)
  • 下载次数: 209
分享到:
评论
5 楼 fantaxy025025 2012-07-13  
看完了分析,貌似跟rails很很像,从思想和步骤来看。
至于具体的,还有待再看。
4 楼 jiangm520 2012-05-18  
ParamValidator 这个验证是如何做的,前台显示采用什么?
3 楼 爱蜗牛的蝙蝠 2011-11-22  
很好呀,对于初学者
2 楼 cantellow 2011-08-20  
snake1987 写道
看完了,可惜没看出哪里好了~

倒是你提到的“作者说“我们 有办法 通过在运行时自动进行代码增强包装成Command而不使用类反射来实现目的“”
感觉有点意思,我们公司也想做这步事情,可惜一直不知道怎么做,即使是cglib也是比正常调用慢了不少的,期待你的进一步分析啊。

如果是初次接触Rose这个概念,你肯定不理解他的好处和优势,这篇文章的本身也不是详细介绍Rose的使用以它的好处,理解这一切的前提是你对Rose有一点了解。
1 楼 snake1987 2011-08-19  
看完了,可惜没看出哪里好了~

倒是你提到的“作者说“我们 有办法 通过在运行时自动进行代码增强包装成Command而不使用类反射来实现目的“”
感觉有点意思,我们公司也想做这步事情,可惜一直不知道怎么做,即使是cglib也是比正常调用慢了不少的,期待你的进一步分析啊。

相关推荐

    开源的快速web开发框架

    WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单。 作为一款高效的Web开发工具,WebBuilder的特色是: .基于浏览器的集成开发环境 ...

    开源WEB框架-Portal-Basic使用手册

    Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置Hibernate、MyBatis和JDBC支持),集成 Action拦截、Form ...

    前后端分离的开源开发框架,基于springboot+vue开发.zip

    前后端分离的开源开发框架,基于springboot+vue开发 前后端分离的开源开发框架,基于springboot+vue开发 前后端分离的开源开发框架,基于springboot+vue开发 前后端分离的开源开发框架,基于springboot+vue开发 前后...

    开源贡献者最多的.net开源web框架ServiceStack.zip

    ServiceStack 是 .Net 和 Mono 的开源框架,相对 WCF,MVC 及 Web API 而言它是开发 Web 服务与 Web 应用的有力替代品。该项目近期宣布他们已经达到超过 100 位合作者的里程碑。 ServiceStack 是一系列事物的综合...

    基于springboot+vue开发前后端分离的开源开发框架源码.zip

    基于springboot+vue开发前后端分离的开源开发框架源码.zip 基于springboot+vue开发前后端分离的开源开发框架源码.zip 基于springboot+vue开发前后端分离的开源开发框架源码.zip 基于springboot+vue开发前后端分离的...

    saas 开源开发框架

    tosaas 开发框架是一款通用的 saas 开发框架,能快速的将传统单企业应用转化成saas多租户模式,支持大数据存储高并发访问,支持无限水平扩展存储服务器、应用服务器数量,经受过百万级用户的实际应用考验。

    Kurogo开源移动WEB开发框架 1.8.6.zip

    Kurogo是一个基于PHP的开源移动WEB开发框架,可以帮助教育机构针对多种移动设备有效地提供服务与信息。这是一个开源的框架应用程序,基础为MIT Framework。Kurogo项目是以模块化的方式将多种形式的数据源转换为适合...

    NetDF免费开源开发框架

    此开发框架为免费开源的开发框架,会不断更新版本,旨在征集开源爱好者的建议,为广大开发者提供一个有利于学习、快速开发高性能软件的框架,此框架对所有源码开放。

    人人网开源paoding-rose框架的jar包

    人人网和糯米网释出的开源web框架,很好用,怎么用可以参考

    开源、免费 HyberBin java web框架 适用于轻量级web项目

    【HyberBin】是一个java web开发的框架,由湖北师范大学计算机科学与技术学院JPLUS实验室创始人hyberbin主持研究开发。其中集成了Jplus实验室多年开发中的经验精华,由计算机科学与技术学院杨怿老师和张行文教授指导...

    大道PHP:LAMP+Zend+开源框架整合开发与实战(随书光盘源码2).rar

    大道PHP:LAMP+Zend+开源框架整合开发与实战(随书光盘源码2)

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架 即有java源码又有dwr.jar包 有实现步骤及演示源码

    PHP实例开发源码-Kurogo开源移动WEB开发框架.zip

    PHP实例开发源码—Kurogo开源移动WEB开发框架.zip PHP实例开发源码—Kurogo开源移动WEB开发框架.zip PHP实例开发源码—Kurogo开源移动WEB开发框架.zip

    argo.jar 开源的web框架

    Argo是开源的web框架,目前Argo支撑着58同城几乎所有的web站点,包括wap和手机端的访问等,现在wf每天处理10亿级的请求。经过长时间的运作与运行,证明Argo是一个可靠的、高效的web框架。 Argo在wf做了大量优化和...

    基于Python的Web框架Django开发的博客系统

    基于Python的Web框架Django开发的博客系统,采用Docker+Django+MySQL+Nginx+Gunicorn进行容器化部署。

    快速开发框架C#源码完全开源版 基于ASP.NET MVC+EF6+Bootstrap框架等

    1、一套基于ASP.NET MVC+EF6+Bootstrap开发出来的框架,源代码完全开源,可以帮助你解决C#以及.NET项目68%的重复工作,让开发人员远离加班。 2、使用ApacheLicense2.0协议,采用主流框架,容易上手,简单易学,学习...

    CocosCreator开源游戏开发框架

    CocosCreator开源游戏开发框架,附文档说明。包含GameMain、AudioManager、ConfigManager、GameController、GameDataManager、ListenerManager、TimeManager、UIManager、ShaderManager、MathExtension、String...

    dwz开源web界面框架

    •简单实用,扩展方便,轻量级框架,快速开发 •仍然保留了html的页面布局方式 •支持HTML扩展方式调用UI组件,开发人员不需写js •只要懂html语法不需精通js,就可以使用ajax开发后台 •基于jQuery,UI组件以jQuery...

Global site tag (gtag.js) - Google Analytics