Architecture 如何使用Kohana v3.1组织一个复杂的web应用程序?

Architecture 如何使用Kohana v3.1组织一个复杂的web应用程序?,architecture,kohana,code-organization,Architecture,Kohana,Code Organization,我们编写了一个非常复杂的web应用程序,它具有以下要求: 它有一个API。不同版本的API可能表现不同。我们必须支持旧版本的API一段时间 它有一个web客户端。web客户端使用AJAX来获取各种数据。假设99%的XHR请求与API请求相同。因此,支持这些XHR请求的源代码应该为API共享。但是,它们是不同的,例如,对于web,登录api应该用cookie响应,对于api,应该用JSON响应 有多种类型的客户端,如iPhone、iPad、Android手机、平板电脑、浏览器扩展等。根据发出请求

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

  • 它有一个API。不同版本的API可能表现不同。我们必须支持旧版本的API一段时间
  • 它有一个web客户端。web客户端使用AJAX来获取各种数据。假设99%的XHR请求与API请求相同。因此,支持这些XHR请求的源代码应该为API共享。但是,它们是不同的,例如,对于web,登录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级联文件系统?您的组是模块,只需根据请求属性添加您需要的模块(通过
Kohana::modules()
)。所以,如果您需要处理android设备,模块列表如下:

  • v1/设备\组\手机/设备\安卓
  • v2/设备\组\手机/设备\安卓
  • v1/设备\组\电话/设备\默认值
  • v2/设备\组\电话/设备\默认值
  • v1/设备组默认值
  • v2/设备\组\默认值

有没有办法多次调用
Kohana::modules
?我想在加载所有其他通用模块后加载这些模块。
Kohana::modules(Kohana::modules()+array('v1_android'=>v1/device_group_phone/device_android,…)