`
cantellow
  • 浏览: 847231 次
  • 性别: 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框架-Portal-Basic使用手册

    Portal-Basic是Java Web应用开发框架,它提供了一套完整的高性能Full-Stack Web应用开发解决方案。其特点包括内置的MVC基础架构和DAO框架,以及对Hibernate、MyBatis和JDBC的内置支持。它集成了多种Web应用组件,...

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

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

    人人网开源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开发 前后...

    java web框架开发技术

    Java Web 框架是指基于 Java 语言的 Web 应用程序开发框架,提供了一个基本的架构和组件,帮助开发者快速构建 Web 应用程序。Java Web 框架包括多种类型,如 Struts2、Spring MVC、Play Framework 等。 二、Struts2...

    saas 开源开发框架

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

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

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

    renren-fast开源框架开发文档2.0_完整版.zip

    这份《Renren-Fast开源框架开发文档2.0_完整版》是该框架的详尽指南,旨在帮助开发者深入了解和熟练运用此框架。 一、SpringBoot集成 1.1 SpringBoot简介:SpringBoot是Spring框架的一个扩展,它简化了Spring应用...

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

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

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

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

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

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

    PHP开源轻型Web框架:lightPHPframework(zip格式)

    使用Web框架可以提高开发效率,减少重复工作,并且通常框架都有良好的可扩展性和维护性。 LightPHP框架以其轻量级特性脱颖而出,它强调简洁和高效。以下是LightPHP的一些核心特点和关键组件: 1. **路由系统**:...

    Go后台开发框架是GoFly全栈开发社区旗下永久开源可商用框架.zip

    Go语言好用web开发框架,能快速搭建应用,框架底层完善,框架插件逐步完善。api文档管理并一键生成api接口代码,一键生成 CRUD前后端代码, GoFly快速开发框架是一款基于Go语言的 Gin和 Vue3… Vue3,springboot,...

    rose框架使用Demo

    Rose框架,全称为Paoding Rose,是由人人网和糯米网共同推出的开源Java Web开发框架,旨在提供高效的开发体验。它以其简洁的API设计、强大的功能以及良好的性能,在Java开发社区中获得了不少关注。在本文中,我们将...

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

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

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

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

Global site tag (gtag.js) - Google Analytics