2009-06-10 15 views
0

CMS(PHP/MySQL)のサイズが大きくなり、コードのメンテナンスが困難になると、MVCモデルを適用してメンテナンス性を向上させ、トランスペアレント。私はそのテーマについていくつか追いついてきましたが、私はそれをかなり考え出したと思いますが、ビューの部分を除きます。ここで私は今のところ考えているものです。MVCモデルのV部分をCMSに適用すると

index => controllers <=> models 
     controllers => views 

メインコントローラ(ルータ)として機能し、URL内のparamsに基づいて、コントローラクラスのインスタンスを作成しますのindex.phpを。コントローラクラスは、データベース内の情報の更新および取得のためのモデルクラスと通信します。その後、コントローラはビ​​ュー(テンプレートの形式)が表示され、表示する処理済みデータを受け取るようにします。しかし...

考え方は、すべてのロジックをビューからコントローラに移動することです。少なくともビューから離れて - 太っている/かわいいコントローラ/モデルの議論を防ぐ。しかし、私はそれを見ていても、私はまだ幾分ダイナミックなビューが必要であり、それはまた、ロジックを必要とします。たとえば、ユーザーのレベルと権限(更新、更新/削除など)に基づいて特定のユーザーのための特定のオプションを表示します。だからそれはif/else文やそのようなものにまで下がります。これでいい?もしそうなら、この「シンプルな」論理のどれが「許可されていますか」?私のテイクは、別のテンプレートが意味を持ち始めるまでです(例えば、profile_viewprofile_edit)。

もう1つの簡単な例。 1人のユーザーが10個のプロファイルフィールドのうち5個を表示でき、別のユーザーが10/10を表示できるとします。コントローラーを介して10個すべてのフィールドのすべての情報を取得し、それを表示するかどうかをビューで決定する必要がありますか?また、これらの種類の決定をコントローラに移し、5または10フィールドの情報を取得し、渡された情報に基づいてビュー内の使用可能なフィールドのみを表示しますか?多くの状況では、すべてのデータを持ち、その一部を無視するのは簡単です。何が利用可能であるかを知らず、常にそのことを確認する必要はありません。

答えて

1

「これはif/else文とそのようなものになります。これは問題ありませんか?」

はい。

"この「シンプルな」ロジックはどれくらい許容されていますか?

単純なif-elseループと単純ループがビューテンプレートに存在する必要があります。

計算がありません。フォーム処理ロジックはありません。そのどれも。

より洗練されたフレームワークのいくつかを見ると、いくつかの例があります。確かに、独自のフレームワークを使う代わりにフレームワークを使うべきでしょう。

[あなたがPythonベースのDjango templateのドキュメントを読むことに忍耐があれば、何が許されるべきかを知ることができます。同様の哲学を持ついくつかのPHPフレームワークは、おそらくあります。]

いくつかのアプローチがありますが、「一人のユーザーが10個のプロファイルフィールドのうち5を見ることができると言うと、他のユーザ10/10」

  1. 同じ基本データを示す2つの異なるページテンプレート。すべて を取得しますが、ユーザーに適したテンプレートを選択します。

  2. バリアントの基礎データを示す1つの複雑なテンプレート。すべてを取得し、適切なフラグを指定し、テンプレート側のif文を使用するテンプレートに送信します。

どちらが「より良い」ですか?複雑なページに対するあなたの食欲に依存します。個人的には、2つの単純なページを持ち、共通の機能を除外するために何らかの継承を使用することをお勧めします。私はif-statementsが好きではありません。彼らは問題の原因です。 OTOH、if文のような人々は複雑ではありません。

0

2番目の例では、10個のフィールドをすべて表示するだけで、コントローラ内の不可視要素をフィルタ処理しないで、可能な限りシンプルに表示します。私の理解とMVCのアプリケーションで

1

、コントローラは、ビジネス/アプリケーションロジックが含まれていますが、ビュー缶はプレゼンテーションロジックが含まれています。あなたのビューはできるだけシンプルで具体的なものにしたいが、コントローラにHTMLを生成してそのビューに表示するだけではいけない。

関連する問題