14

私はパターンの設計には比較的慣れていませんが、MVC パターンと、このコードの分離がもたらす利点について十分に理解していると感じています。

ただし、MVC パターンの動作 (Magento と Joomla!) を見た 2 回とも、ビュー クラス (Magento ブロック) と PHP テンプレート ファイルの両方で構成されるビューで、さらに特殊化されています。誰かがこの分割の利点を説明できれば幸いです.

ビュークラスとテンプレートファイルの間でコードを分割する方法についても途方に暮れています。単純にモデルにアクセスし、データをテンプレートで使用できるようにするだけの冗長なビュー クラス (Joomla で!) を作成していることに気付くことがあります。テンプレートにどのコードを表示し、ビュー クラスにどのコードを表示する必要がありますか?

4

5 に答える 5

6

ビューは、MVCに着想を得たデザインパターンで、すべてのUIロジックを担当します。モデルレイヤーに情報を要求し、受け取ったものに基づいて、応答の作成に使用するテンプレートを選択する必要があります。または、レンダリングが必要な場合でも(ビューはHTTPヘッダーを送信することもできます)。

従来のMVCおよびModel2MVCパターンでは、ビューはモデルレイヤーからのみ読み取り、コントローラーはモデルレイヤーにのみ書き込みを行うと言えます。

モデルレイヤーからエラー状態を受け取った場合、ビューはメインのレイアウトテンプレートを取得し、エラーメッセージのHTMLフラグメントを含むテンプレートを補足します。次に、ユーザーに表示されるすべてのものを組み立てます(Webアプリケーションの場合はブラウザーです)。

基本的なWebアプリケーションのテンプレートは、タグとphp変数を組み合わせた単純なファイルです。

于 2012-11-06T00:41:43.253 に答える
3

を 、テンプレートを とview見なすことができます。whathow

ビューは、モデルを使用してデータを準備し、このデータをテンプレートで使用できるようにします。

次に、テンプレートは通常、(少なくとも Joomla! では) ビューのスコープで呼び出されます。

これは最初は冗長に思えるかもしれませんが、テンプレートのオーバーライドを使用すると、このアプローチの威力が明らかになります。次に、ビューをそのままにして、テンプレート (またはこの件に関してはサブテンプレート) のみをオーバーライドできます。

同じメイン (Joomla!) テンプレートを使用していても、プレゼンテーションの特殊化が必要な場合に備えて、別のビュー テンプレートをパラメーターとして指定できます。これにより、コードの繰り返しもなくなります。

たとえば、新しいメイン テンプレートを作成するとします。デフォルトのビュー/テンプレートの一部をオーバーライドし、他の一部をそのままにしておくことができます。次に、新しいview、たとえばblog viewと、2 つの異なるシナリオで使用するためのlight spaceddark denseの 2 つのテンプレートを作成できます。このように、すべての を準備する 1 つのビューとwhathow.

于 2012-11-06T00:08:13.717 に答える
2

一般に、「ビュー」と「テンプレート」の分割は、異なる方法でビュー データを表示する場合 [つまり、. HTML、XML、JSON など] の場合は、'View' クラスを書き換え続ける必要はなく、新しい 'Template' クラスを作成するだけです。これは、AJAX 呼び出しをフロントエンドに組み込みたい場合や、スマートフォン アプリなどの他のアプリケーションから呼び出しを行う場合に便利です。

于 2012-11-06T00:03:17.400 に答える
0

このhttp://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.htmlをお読みください。私にとってMVCとは、関数を配列に登録し、その配列をループして、最終的にメインプログラムで関数を呼び出すことを意味します。しかし、多くの人にとって、モデル(データベース)をビュー(htmlテンプレート)およびコントローラー(メインアプリケーション)から分離しているように見えます。しかし、それは私がプログラムについて特別だと思うことではありません。Webアプリケーションを自然に開発する場合、データベース、ブラウザー、バックエンドとフロントエンド、html、css、画像ファイル、ビデオファイル、php言語など、これらすべてのバックエンドがあります。なぜこれが開発を混乱させる複雑な言葉になっているのでしょうか。MVCは一般的に有用だと思います。デコレータパターンを学ぶと、はるかに便利です。

于 2012-11-06T00:10:36.840 に答える
0

正直なところ、パフォーマンスの最適なオプションは、バックエンドで Web サービスを作成し、javascript ライブラリを使用してサーバーと通信することです。joomla およびその他の cms ディストリビューションは、これらの設計パターンの両方を MVC に抽象化しようとし、MVC と Web サービス/クライアント側コードのハイブリッドを引き起こします。このようなハイブリッドな性質により、拡張機能を JavaScript ランドスケープに拡張することができます。これは、Web が向かっている方向のようです。

于 2012-11-06T00:27:33.207 に答える