可以在运行时 被参数化,产生和添加到一个类或方法中。
八、 Ruby on Rails
网络应用框架的使用
Atma 群组软件是使用 Ruby on Rails 框架
编写的。Ruby on Rails 是轻型网络 框架概念的先驱。这种类型的框架大多
常用动态语言编写,支持 MVC(模型视图-控制器,[3])或者 MTV(模型-模板-视图,[4])策略,还强调如 DRY(不 要重复自己,[5]和[6])和 COC(约定胜于配置,[7]) 。如今这个概念在几乎所 有流行的动态语言里都有它的代表,包括 perl(Catalyst,[8]) ,python(Django, [9]) ,PHP(Cake
PHP,[10],或者 PHP on Trax,[11]和 Groovy(Grails[12])。 ) 如本文一开始所述,Rails 是一个基于 MVC 策略的网页应用框架。在 Java 术语中, 一个 MVC 的网络实现称为模型 2 与之相对的是不使用 MVC 的模型 1) ( , 定义在[13]中。MVC 在 Rails 上
工作的方式在图 2 中呈现。 MVC 模式呈现在应用体系中需要三个层次:模型层,视图层和控制层。 Rails 中 的 模 型 是 通 过 把 ORM ( 对 象 - 关 系 映 射 , [15] ) 应 用 于 叫 做 ActiveRecord 的子框架上来处理的。ActiveRecord 是 Martin Fowler 的 Active Record 设计模式[16]的一个实现。 Active Record 模式中, 在 一个类被映射到了一 个数据库表格中(具有如可在表中寻找和升级行的特性) ,还有一个对象被映射 到了一个表的列中。
万维网客户端 超文本标记语言文件 (请求) 超文本标记语言文件 (响应)
网络服务器 调度
程序 控制器
视图
模型
图 2 Rails 中模型,视图和控制器的控制流 来自[14] 视图输出格式通常是超文本标记语言(
HTML) ,但也可以是其它类型,包括 可扩展标识语言(XML),JSON,
JavaScript 代码,PDF 或者 CVS。Rails 中的视 图默认通过一个叫做 ERB(嵌入式 RuBy)的模板引擎来处理。它用来解释嵌入 在文本文件里的 Ruby 代码,跟
JSP 页面工作方式类似而区别于 Java 企业版本。 除了 ERB 以外,其它的模板引擎也是可用的,如 Haml[17]被广泛的用于 Atma 群组软件。 控制器是将视图和模型连接在一起的对象。Ruby 中的控制器是 REST 使能 的(REST 是表述性状态转移的简称,[18])和多格式软件(它们可以根据视图 要求的资源格式来执行不同的操作) 。
九、 显著的技术特征 1. 授权
Atma 群组软件中使用的授权思想受到了用在 UNIX 文件
系统中叫做访问控 制表(ACL)的专用方法和解决
方案的启发(描述于[19]) 。每一个资源实例都 有一个关于实例主要部分的 CRUD(创建-读取-更新-删除,[20])特权被授予给 群 组 ,例 如某 人可 以被 收 取编 辑项 目的 CARE 数 据, 但不 能编 辑 项目 的 WISDOM。这点可从图 3(只是一个概念图,展示思想而不是实现——具体的图 会更加复杂)中看出来。
参与者
群组
授权表示例 creator_privilege () reader_instance_privilege () editor_instance_privilege () destroyer_in
stance_privilege () 特权
图 3 授权实现概念图 注意 creator_privilege 是一个静态的方法(在 Ruby 中这些被称为“特殊方法”, ) 因为它不被应用于任何个别的资源实例,而是应用于资源本身。其它的特权授予 方法都是实例方式,因为特权可能在同样的资源不同的实例中不同。 当系统中创建了新的参与者,该参与者
登陆时一个新的群组会以同样的名字 创建。这个群组叫做参与者的“个人群组”是被用来作为网页的个人部分的,如 个人记录。 换句话说,只对于某些参与者可查看的区域只对于他们的个人群组人 员可见。管理员默认是所有已经存在的和新建的群组的成员。 授权如此理解同时是领域问题,政策问题还有描述问题,因此它得在所有的 层次上得到实现:模型,视图和控制器。 由于 Ruby 的类重开特性,所有的模型对象都是默认授权,所有的控制对象 不用在它们的类中编写额外的代码去检测授权。 需要编写代码的唯一情况是当一 个 资 源 不