0

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

  • 它有一个 API。不同版本的 API 可能表现不同。一段时间以来,我们必须支持旧版本的 API。
  • 它有一个网络客户端。Web 客户端使用 AJAX 来获取各种数据。说 99% XHR 请求与 API 请求相同。因此,应该为 API 共享支持这些 XHR 请求的源代码。但同样是不同的,例如登录 api 应该在 web 的情况下使用 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 中做到这一点?
4

1 回答 1

2

为什么不使用现有的 Kohana Cascade 文件系统?您的组是模块,只需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
于 2012-07-10T14:19:00.097 回答