`
cantellow
  • 浏览: 847741 次
  • 性别: 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也是比正常调用慢了不少的,期待你的进一步分析啊。

相关推荐

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

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

    开源的快速web开发框架

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

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

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

    以下是一些常用的管理系统源码资源: Django:一个基于Python的开源Web框架,提供了一个完整的管理系统框架 Git

    Django:一个基于Python的开源Web框架,提供了一个完整的管理系统框架。 GitHub:https://github.com/django/django Flask-Admin:一个基于Flask的Web框架,提供了一个简单的管理系统框架。 GitHub:...

    前后端分离的开源开发框架,基于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 是一系列事物的综合...

    saas 开源开发框架

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

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

    《大道PHP:LAMP+Zend+开源框架整合开发与实战》是一本深入讲解PHP开发技术的书籍,结合了Linux(L)、Apache(A)、MySQL(M)和PHP(P)四大核心技术,以及 Zend 框架和多种开源框架的实战应用。随书光盘源码2提供...

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

    【标题】"一种开源业务系统框架winform源码"揭示了这是一个基于Windows Forms(Winform)的开源软件开发框架,专用于构建业务系统。Winform是.NET Framework中的一个UI库,用于创建桌面应用程序,它提供了丰富的用户...

    开源mvc框架源码

    【标题】:“开源MVC框架源码”是指公开的、基于Model-View-Controller架构模式的Web开发框架的源代码。这些框架允许开发者通过分离业务逻辑、数据处理和用户界面来构建应用程序,提高代码的可维护性和可扩展性。 ...

    基于SpringBoot+Vue前后端分离的Java快速开发框架,一套全部开源的快速开发平台

    【标题】中的“基于SpringBoot+Vue前后端分离的Java快速开发框架”指的是一个现代的软件开发模式,其中SpringBoot是后端的核心框架,Vue.js是前端的主要UI库。SpringBoot简化了Java应用的初始化和配置,使得开发更加...

    Linux 通用 WebAdmin (webui) 开发框架-C语言 源码

    提供了一个结构化的WebAdmin开发框架,它的前后台部分均采用插件式的程序开发方法,借助提供的插件开发模板,WebAdmin系统开发者不必关WebAdmin开发框架的具体实现,就可设计出界面统一、操作简单、安全稳定的WebGUI...

    argo.jar 开源的web框架

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

    伍华聪2.0Web开发框架

    "伍华聪2.0Web开发框架"是一个专为现代Web应用设计的高效、灵活的开发工具集。这个框架旨在简化Web应用的构建过程,提高开发效率,同时保证代码的质量和可维护性。通过深入理解"伍华聪2.0"这一标签,我们可以推断出...

    开源WEB在线SQL管理工具_dotnet整站程序.rar

    开源WEB在线SQL管理工具是一种基于Web的数据库管理解决方案,它允许用户通过浏览器远程访问和管理他们的SQL数据库。这个.dotnet整站程序集成了完整的网站架构,由.NET框架提供支持,这意味着它利用了C#、VB.NET或...

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

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

    2020年web开发需要的python框架:Django.pdf

    Django是一个基于Python的自由开源Web应用框架,使用MTV(Model-Template-View)模型架构。该框架于2005年发布,最初用于开发内容管理系统(CMS),后来逐渐演变为一个功能完整的Web框架。 Django的主要特点之一是...

Global site tag (gtag.js) - Google Analytics