|
目录
来源:http://trac.seagullproject.org/wiki/Concepts/ModulesManagersAndControllers Modules, Managers和Controllers(todo)在开发者开始认真考虑使用这个框架来开发之前,Seagull中许多合乎逻辑的分组,有助于开发者理解这个框架. Modules和Managers以Seagull为基础创建应用程序时,开发者的主要工作是创建他/她的模块。一个模块就是一个功能的逻辑分组,以用户模块为例,你会发现管理下面这些实体的代码
等等,换句话说,就是”用户管理”的所有方面.在Struts中,模块被称为'Catalog'. 一个模块由一个或多个Manager组成.简单的讲,一个Manager就是一个页面控制器对象,这个对象封装了许多相关的操作某个单一的实体或业务对象的行为方法(action).例如一个使用者,一次交易,一个购物车等.以下是Managers控制中具有代表性的行为(action):
不过你可以以自己的方式命名action. 有些项目中把action称为命令,有些地方称为事件.所有的Manager都以Validate/Process/Display工作流程模式实现.在PHP5中这些由SGL_Manager接口实现,这个接口抽象地定义validate(),process()和display()方法.在PHP4中,所有的manager类通过继承SGL_Mananger来达到同样的目的。Managers是页面控制模式的实例,有时就直接被称为'controllers'. Controllers(控制器)应用程序控制器作为应用程序的Controller,所有的managers或Page Controllers都继承了SGL_Manager。SGL_Manager设置的工作流程对大部分WEB应用程序来说都是比较好的普遍选择。但是并不限制你一定要实现validate/process/display的工作流程,你可以很容易地创建其它的应用程序controller,并让你的页面controllers继承它. 一个好的例子就是创建一个REST服务器的情况下,它不需要模板的管理,没有display()方法,只要对输入流进行XML到PHP转换,反过来也是一样,要对输出流和数据提取进行PHP到XML的转换。所有的权限检查会被简单的HTTP验证(浏览http://del.icio.us/help/api/)所取代,将不需要session,最终你将得到一个轻量级的应用程序. Front ControllerSeagull还使用了另一个比较高级的controller来帮助简化代码的负担,即Front Crontroller,存放在/trunk/lib/SGL目录中。这个对象负责处理所有用户客户端的requests,并把责任委托给过滤链。过滤链是一个简单的input/output过滤器列表和目标的核心处理器,也就是上面提到的应用程序Controller。过滤链中的各种过滤器建立并净化请求对象,从URI从分解出相应的manager和action详细信息,执行了域名逻辑,最后发送适当的headers。 Front Controller还负责初始化Seagull的环境,包括设置路径,解析配置文件等。 继续阅读 Concepts/ValidateProcessDisplay 来综观一下工作流程。 还可浏览
|