【问题标题】:how to organize code for different "mobile device interfaces" and "desktop interfaces"如何为不同的“移动设备界面”和“桌面界面”组织代码
【发布时间】:2010-02-22 14:10:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: php user-interface kohana mobile-website code-organization


    【解决方案1】:

    你真的有好几种选择!

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

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

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

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

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

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

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

    希望这会有所帮助;)

    【讨论】:

    • 如果您使用路由来生成链接,那么用户将看到 /mobile/ URL,甚至更多的是重复的 url(对 SEO 不利)。我认为最好为移动和桌面使用相同的 url,检测它是否是 PHP 上的移动设备(并将其保存在会话中),然后在您的操作或 view_models 中决定您要显示什么。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      最后我遵循了不同的 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/
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-26
          • 2013-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多