如何使用Kohana v3.1组织复杂的Web应用程序?

时间:2012-07-10 12:11:35

标签: architecture kohana code-organization

我们编写了一个非常复杂的Web应用程序,它具有以下要求:

  • 它有一个API。不同版本的API可能表现不同。我们必须支持旧版本的API。
  • 它有一个Web客户端。 Web客户端使用AJAX来获取各种数据。说99%XHR请求与API请求相同。因此,应该为API共享支持这些XHR请求的源代码。但是同样的情况也不同,例如登录api应该在网络情况下响应cookie,在api情况下使用JSON响应。
  • 有多种类型的客户端,例如iPhone,iPad,Android手机,平板电脑,浏览器扩展等。行为可能因提出请求的平台而异。

我想到的一种组织这种东西的方法是将Kohana HMVC级联风格扩展到更高级别。例如:

src/
htdocs/
v1/
    device_group_phone/
        device_iphone/
            controllers/
            views/
        device_android/
            controllers/
            views/
        device_default/
            conrollers/
            views/
    device_group_tablet/
        device_ipad/
            controllers/
            views/
        device_default/
            conrollers/
            views/
    device_group_default/
        controllers/
        views/
        models/        
v2/
    ...
    ...
    ...
modules/
system/

请求的提供方式是:

 - Go to proper version.
 - if there is a controller/view device(x),
     then load it.
   else, if there exists a controller/view for device_group(x)/device_default, 
     then load it.
   else if there exists a controller/view for device_group_default
     then load it.
  • 第一个问题,是否有更好的方法来组织此代码?
  • 第二个问题,如果没有,如何在Kohana中做到这一点?

1 个答案:

答案 0 :(得分:2)

为什么不使用现有的Kohana级联文件系统?您的群组是模块,只需根据请求属性添加您需要的模块(通过Kohana::modules())。所以,如果你需要处理android设备,模块列表将是这样的:

  • V1 / device_group_phone / device_android
  • V2 / device_group_phone / device_android
  • V1 / device_group_phone / device_default
  • V2 / device_group_phone / device_default
  • V1 / device_group_default
  • V2 / device_group_default