0

モバイルおよびデスクトップ向けの開発について質問があります。
デスクトップ用のモバイルおよびその他のコンテンツを提供する必要があります... アイデアは
の とおり
です

。コントローラーがリクエストを識別し、model_mobile / model_desktopおよびview_mobile / view_desktopをロードするという考えがあります...それは正しいですか?

基本的にはコントローラーにあります:

if ($ request-> ismobile () === true)
{
include 'model_mobile.php';
include 'view_mobile.php';
}
else
{
include 'model_desktop.php';
include 'view_desktop.php';
}
4

2 に答える 2

2

プレゼンテーション ロジックは View インスタンスの範囲です (参考までに、ビューはダム テンプレートではありません)。

デスクトップではなくモバイル デバイスを介してサイトとやり取りすることにしたからといって、ドメインのビジネス ロジックは変わりません。モデルはそのまま。この変更はビューのみに影響し、ビューがどれだけ適切に記述されているかによって異なります。基本的に、次の 2 つのオプションがあります。

  1. ビューは、デスクトップとモバイルで異なるテンプレートを使用します。モデル層から必要な情報を要求します。テンプレートをレンダリングします。これは、ほとんどの情報がモバイル クライアントとデスクトップ クライアントの両方で同じであるという事実に依存しています。

  2. モバイル用とデスクトップ用に異なるビューがあり、各ビューで使用できるテンプレートは既にわかっています。この場合、テンプレートを使用してレンダリングする前に、モデル レイヤーからの非常に具体的な情報に対するビュー リクエスト。

2 番目の方法は、負荷の高いシステムには適していますが (ストレージとのやり取りをより正確にすることで少し節約できる可能性があります)、コードの重複が伴います。

もちろん、オプション nr.1 でこのような正確な要求を行うこともできますが、それにif ($desktop) .. elseはビュー全体にわたってブロックを繰り返す必要があり、コードを 2 つのクラスに分割し、ポリモーフィズムを採用する必要があることを明確に示しています。

コントローラーはどうですか?

どちらのオプションでも、コントローラーは同じままです。ビューの状態を変更する (最初のケース) か、作成するビューのタイプを決定する (2 番目のケース) ことによってのみ、ビューに影響を与えます。

一部のコントローラー アクションをモバイル ユーザーから非表示にする必要がある場合(別のテンプレートを使用することで既に部分的に実現されています)、ユーザーがコントローラーの特定のメソッドにアクセスできるかどうかを決定できる、ある種の ACL を実装できます。

もちろん、これはすべてMVC の理解にかかっています。

于 2012-07-14T13:52:40.533 に答える
0

私は次のようにします:

  1. ブートストラップで、それがモバイル リクエストであることを検出します
  2. ユーザーを、場合によってはm.サブドメインにリダイレクトします
  3. m.サブドメインは特別なモバイル コントローラーにルーティングされます
  4. モバイルコントローラーは、実質的には通常のコントローラーと同じで、モバイルデバイスを表示するだけで、通常のコントローラーよりも機能が少し制限されています。

コードの重複を避けるために、モデルは同じものを使用する必要があります。

于 2012-07-14T07:43:36.940 に答える