3

私は常にMVC、MVP、MVVMなどの完全な概念を理解するのに苦労していました。これらのモデルのいずれかをフォローしているかどうかさえわからないので、誰かが光を当ててくれることを願っています。私のアプリケーションは、PHP、JS、HTML、CSS、AJAX、MySQLをコアとして使用しています。

見る

HTML / CSSが明らかにビューであることは知っていますが、PHPにHTML要素を生成させることもあります。また、JSにHTML要素を操作してCSSを変更させることもあります。つまり、PHPは技術的にはサーバーサイド言語ですよね?では、PHPが「ビュー」要素を生成できるという事実は、プログラミングパターンにおけるその役割を変えるのでしょうか。

AJAXリクエストを処理する専用ファイル

JSから送信されたすべてのAJAXリクエストを処理する単一のPHPファイルがあります。一意のPOSTまたはGETパラメーターを渡して、AJAXリクエストの目的を区別し、PHPファイルにはこれらを処理するための一連のIfステートメントがあります。

$req = $_REQUEST['type'];
if($req == 'get_users'){
// do stuff
}

ほとんどの機能はデータベースの書き込みと読み取りです。これがコントローラーであるというのは正しいですか?

モデル

モデルは、定期的に呼び出す関数とクラスのセットであると想定していますか?

まとめ

私の主な質問は、1つがクライアント側で、もう1つがサーバー側であっても、プログラミングパターンを複数のプログラミング言語に適用できるかどうかです。私もプログラミングパターンに従っていますか?私が1つではない、またはある程度近い場合、パターンに正確に従っていないかどうかは重要ですか?それが私を支えているものだと思います。皆さんが私を理解するのに役立つことを願っています。

4

3 に答える 3

3

HTML / CSSが明らかにビューであることは知っていますが、PHPにHTML要素を生成させることもあります。

ビューは、実際にはプレゼンテーションロジックを含むインスタンスであると想定されています。モデル層から情報を取得し、その情報に基づいてユーザーに送信する応答を決定します。応答は、単なるHTTPヘッダーの場合もあれば、複数のテンプレートからビューが組み立てられたHTMLドキュメントの場合もあります。

では、PHPが「ビュー」要素を生成できるという事実は、プログラミングパターンにおけるその役割を変えるのでしょうか。

これは、ビューが変更のモデルを監視する必要があるため、従来のMVC( smalltalkで定義されている)を実装できないというテーマに少し触れています。これをWebに実装するのは非常に難しく、非常に実用的ではなく、拡張性もまったくありません。Webの代わりに、元のMVCに触発されたモデル2 MVC、MVP、およびMVVMパターンを使用する傾向があります。また、実際にはMVCとは関係のないHMVCパターンもありますが、同じ問題を解決しようとしています。

これらのMVCに着想を得たパターンはすべて、プレゼンテーション層の実装方法が異なります。プレゼンテーション層もここにあります。Model2 MVCパターンには、モデルレイヤーからの情報を要求するアクティブなビューがあります。MVPおよびMVVMでは、ビューはパッシブであり、コントローラーのような構造を介してデータを受信します。

ほとんどの機能はデータベースの書き込みと読み取りです。これがコントローラーであるというのは正しいですか?

あなたがこれが何を意味するのかを私が理解したなら、いいえ、そうではありません。

すべてのMVCに着想を得たパターンでは、コントローラーまたはコントローラーのような構造が、モデルレイヤーとビューの状態の変更を主に担当します。MVPとMVVMでは、モデルレイヤーからのデータも要求し、MVVMではそれを操作します。

ただし、ストレージ(SQLデータベースである場合とそうでない場合があります)との相互作用は、モデル層の奥深くに埋め込まれています。私がこの件について書いた、より長い投稿があります。

モデルは、定期的に呼び出す関数とクラスのセットであると想定していますか?

完全に真実ではありません。上記のリンクを参照してください。

私もプログラミングパターンに従っていますか?

コードがないとわかりにくいですが、MVCに触発された設計パターンに厳密に従っていないことを確信しています。あなたがしているのは、MVCのコア原則である何らかの形のSoCを実装することです。PHP開発者が実際にOOPの原則とパターンを研究し始め、さらに改善する段階にあると言えます。

于 2012-08-31T14:54:01.167 に答える
2

ほとんどの機能はデータベースの書き込みと読み取りです。これがコントローラーであるというのは正しいですか?

もしそれが:

  1. URLに基​​づいてリクエストをどう処理するかを決定し、それがコントローラーの役割を果たします
  2. データベースと対話し、ビジネスロジックを適用し、データを返すことで、モデルの役割を果たします。
  3. そのデータを使用してHTML/JSON / XML /その他のクライアントに送信されるものを生成すると、ビューの役割を果たします。

上記の複数を実行している場合、それはさまざまな役割の寄せ集めであり、懸念事項を分離することを検討する必要があります。

モデルは、定期的に呼び出す関数とクラスのセットであると想定していますか?

モデルは、データと相互作用し、ビジネスロジックを適用するコードです。

私の主な質問は、1つがクライアント側で、もう1つがサーバー側であっても、プログラミングパターンを複数のプログラミング言語に適用できるかどうかです。

はい。

DOM(View)を編集し、ユーザー入力(Controller)に基づいて何をするかを決定し、XMLHttpRequestを使用してサーバー(Model)からデータをフェッチするクライアント側のJavaScriptを使用できます。

次に、そのJS(View)のJSONを生成するPHP、JS(Controller)からのリクエストのデータに基づいて何をするかをデバイスし、データベースと対話してレスポンス(Model)のデータを取得するPHPを使用できます。

私もプログラミングパターンに従っていますか?

あなたは神のアンチパターンに従っているように聞こえますが、あなたはあなたがしていることの簡単な概要を与えただけです。

于 2012-08-31T13:34:12.273 に答える
0

I mean, PHP is technically a server-side language right?

はい、そうです。(ローカルで使用することもできますが、コンパイルしてデスクトップアプリのバイナリなどを生成することもできます。)

So does the fact that PHP can generate "View" elements change its role in the programming pattern?

いいえ。コアとなる「ビュー」の概念は、アプリケーションの他の部分からの分離です。理想的には、「表示」レイヤーにビジネスロジックやデータベースクエリなどがないことです。例:最初に、すべての計算と操作を行います。最後のステップとして、結果を出力用の「ビュー」に変換します(HTML、XML、またはJSONなど)。SQLクエリと「echo」ステートメントを混同することはありません。

Do I have it right that this is the controller?

説明では、2つの異なるものがあります。1つは「ルーター」と呼ぶことができます。これは、HTTPリクエストに基づいて呼び出す関数/メソッドを決定する場所です。

この場合の「コントローラー」は、データベースの読み取り/書き込み関数とビュービルド関数を呼び出す関数です。コントローラはモデルと対話し、出力を提供します。これは、データベースと対話する必要があるモデルです。

I am assuming that the model is the set of functions and classes I call periodically?

モデルは通常、データベースの読み取りと書き込みを行う関数のグループです。これが実際の主な使用法です。しかし、これは「モデル」の定義ではなく、最も一般的な形式にすぎません。

例:商品を販売する仮想店舗がある場合。次に、「製品」モデル、つまり、データベースへの新製品の挿入、製品情報の更新、その価格の計算、「製品」で実行する可能性のあるその他すべてを処理するクラスが作成されます。 "。これらの方法は、あらゆるコントローラー、あらゆるルート、あらゆるビューで機能する必要があります。これは、責任のパターン分離/編成の1つの目標です。同じストアモデルを使用して、まったく新しいフロントエンドWebサイトを作成できるはずです。

whether or not a programming pattern can apply to more than one programming language even though one is client-side and another is server-side.

はい。1つのアプリケーションで多くの異なる言語を使用します:HTML、JavaScript、PHP、SQLなど。アプリケーション全体が一連のパターンに従うことができます。各言語を使用して、パターン内で1つ以上の役割を実行できます。

Am I even following a programming pattern? If I am not or am somewhat close to one, does it matter if I am not following a pattern exactly?

はい、そうです。名前がなくても、「自分のパターン」を踏襲していても、確かに何らかのパターンを踏襲していなければ、アプリケーションを構築できないと思います。このパターンは、MVC、ABC、XYZ、CSMなどです。もちろん、概念を学べば、これらの概念を使用して他の開発者とアプリケーションコードについて話すことができます。学ぶのは確かに良いことですが...

いいえ、パターンに正確に従わなくても「問題ありません」。あなたは、新しい、強化された、より良いパターンを作成することになるかもしれません!時々、あるパターンへの適合を心配することはあなたの創造性を混乱させるかもしれません。必要以上に心配する必要はありません。

そうは言っても、あなたは正しくやっていて、知りたい、理解したい、そしてこれらのパターンとその概念をマスターすることさえしていると思います。MVCは、プログラマーが理解するための重要なことです。良い先生がお手伝いします。素敵な本や記事を読む。ここSOでの質問と回答。いくつかのGoogleの調査...そして何よりも、コーディングの経験。到達するための実用的な目標、コーディングするアプリ、実際に学んだことを適用する場合は、徐々にそれらを理解するようになります。

于 2012-08-31T13:51:24.337 に答える