`
cantellow
  • 浏览: 853287 次
  • 性别: 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开发前后端分离的...

    开源的快速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 是一系列事物的综合...

    java web框架开发技术

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

    NetDF免费开源开发框架

    NetDF免费开源开发框架是一个专为开发者设计的高效、易学且不断演进的软件开发平台。这个框架的核心目标是促进技术交流,鼓励开源社区的爱好者贡献他们的想法和改进方案,从而打造出一个能够帮助广大开发者快速构建...

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

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

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

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

    saas 开源开发框架

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

    Web前段优美框架:开源

    开源Web框架是指那些允许公众自由访问、使用、修改和分发源代码的前端开发框架。这些框架通常由全球开发者社区共同维护,不断迭代更新,以满足快速发展的Web技术需求。开源的特性使得开发者可以借鉴他人的智慧,减少...

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

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

    开源mvc框架源码

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

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

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

    argo.jar 开源的web框架

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

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

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

Global site tag (gtag.js) - Google Analytics