3

我正在计划一个 Web 应用程序。我正在使用带有 Smarty 的 PHP 框架 Kohana。我的 Web 应用程序也将具有移动设备界面。现在,这两个接口将有很多通用代码和很多单独代码。

我应该如何组织代码以便:

  1. 没有重复的代码。
  2. 不需要的代码不会被加载。例如,桌面 UI 特定代码不应加载到 iPhone 界面中,反之亦然。
4

4 回答 4

4

你真的有几个选择!

您可以选择使用共享的 Kohana 模块走“2 项目”路线——但我个人不喜欢这种方法。

我个人会使用类似的方法作为多语言网站 - 所以...... apache(或其他)会重写 m.example.tld/my/page -> www.example.tld/mobile/my/page

假设您使用 Kohana3 - 标准路线可以更改为:

Route::set('messages', '<format>/(<controller>(/<action>(/<id>)', array('format' => '(mobile|desktop))
->默认值(数组(
 '格式' => '桌面',
 '控制器' => '欢迎',
 '动作' => '索引',
));

所以 - 用户永远不会看到 /mobile/ URL,但您现在可以根据 Request::instance()->param('format'); 选择哪个 smarty 模板;

可能 - 您只需要为每个平台复制视图文件/智能模板。

我对输出格式使用类似的模式... XML、JSON、XHTML、RSS ..

希望这可以帮助 ;)

于 2010-02-23T00:02:49.460 回答
1

一种方法是简单地为桌面浏览器和移动浏览器使用单独的视图。您的所有逻辑都将在您的控制器中,因此您不会重复代码,您只需根据浏览器的用户代理字符串调用相关视图。

于 2010-02-22T14:13:06.553 回答
1

最后我遵循了不同的 2 Project 路线的方法。因为它提供了很大的灵活性。如果我想共享一些模型、视图、控制器,我将它们放在“模块”中。否则,如果我想为两个接口分开一些东西,我将它们放在相应的项目中。

所以:我的来源看起来像:

</>
  proj_desktop/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_iphone/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_mobile/
    htdocs/
    application/
      models/
      views/
      controllers/
  modules/
    myApp/
      models/
      views/
      controllers/
  system/
    models/
    views/
    controllers/
于 2010-05-07T12:48:34.507 回答
0

我绝对建议为移动和桌面显示设置单独的视图。如果可能,不要将视图直接绑定到用户代理字符串——使用用户代理字符串将移动设备定向到单独的 URL(如 m.whatever.com/page 或 www.whatever.com /m/page) 分别呈现。

于 2010-02-23T00:31:54.387 回答