我们编写了一个非常复杂的 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 中做到这一点?