3

Web アプリケーションを計画しています。Smarty で PHP フレームワーク Kohana を使用しています。私の Web アプリケーションには、モバイル デバイス インターフェイスもあります。これで、2 つのインターフェイスに共通のコードと個別のコードが多数存在することになります。

次のようにコードを整理するにはどうすればよいですか。

  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))
-> defaults(array(
 'format' =>'デスクトップ'、
 'コントローラー'=>'ようこそ'、
 'アクション'=>'インデックス'、
));

つまり、ユーザーには/ mobile / URLが表示されることはありませんが、Request :: instance()-> param('format');に基づいてどのsmartyテンプレートを選択できるようになりました。

可能性が高い-プラットフォームごとにビューファイル/Smartyテンプレートを複製するだけで済みます。

私は出力フォーマットに同様のパターンを使用しています...XML、JSON、XHTML、RSS ..

お役に立てれば ;)

于 2010-02-23T00:02:49.460 に答える
1

最後に、別の 2 プロジェクト ルートのアプローチに従いました。柔軟な対応ができたからです。いくつかのモデル、ビュー、コントローラーを共有したい場合は、それらを「モジュール」に入れます。それ以外の場合は、2 つのインターフェイスに別のものが必要な場合は、それらを対応するプロジェクトに配置します。

だから:私のソースは次のようになります:

</>
  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 に答える
1

1 つの方法は、デスクトップ ブラウザーとモバイル ブラウザーに別々のビューを使用することです。すべてのロジックはコントローラーにあるため、コードを複製する必要はありません。ブラウザーのユーザー エージェント文字列に基づいて、関連するビューを呼び出すだけです。

于 2010-02-22T14:13:06.553 に答える
0

モバイル ディスプレイとデスクトップ ディスプレイで別々のビューを使用することを強くお勧めします。可能であれば、ビューをユーザー エージェント文字列に直接関連付けないでください。ユーザー エージェント文字列を使用して、モバイル デバイスを別の URL (m.whatever.com/page や www.whatever.com など) に誘導します。 /m/page) 個別にレンダリングします。

于 2010-02-23T00:31:54.387 に答える