MVCはPHPプログラミングのSEOにすぎませんか?


9

およそ何億もの「PHPフレームワーク」があります。そしてそれらのほとんどは、MVCパターンに従って自分自身に請求します。osCommerceのコーディングスタイル(SQLとHTMLと非常に混ざり合った処理ロジック)を克服することは歓迎されますが、保守可能なアプリケーション設計を実現するためのアプローチは確かに単純で簡単です。

元のMVCコンセプトは、GUIアプリケーションを対象としていました。そして、Gtk / Pythonの場合は、それに応じて実行するのが現実的であるように思われます。しかし、PHP Webアプリはライブビュー(GUI要素)と永続的なコントローラーランタイムでは動作しません。使用されているコード+ディレクトリのグループ化またはクラスの名前付けだけを記述しているのであれば、それは間違いなく間違いです。

「MVC」は、PHPフレームワークの流行語のように使用されているようです。そして、私は実際に1つまたは2つの成熟したPHPフレームワークがそれを認めているのを見ましたが、とにかくフレーズを再定義して内部に一致させます。
それは一般的にヘビ油ですか?なぜより良い用語が使われず、メンテナンス可能なPHPのためのより賢明な概念が広まったのですか?

いくつかの手の込んだ推論

PHPの実装が実際のMVCパターンに従っていないと思うのはなぜですか。

モデル:理論的には、モデルは太く、ビジネスロジックを含み、コントローラーはシンハンドラー(入力->出力)である必要があります。実際には、PHPフレームワークは浅いモデルを提唱しています。CIとSymfonyの例は、等価なモデル== ORMです。HTTP入力もコントローラーによって処理され、モデルとして扱われません。

ビュー:AJAXが割引された回避策。Webページにビューを含めることはできません。PHPフレームワークはまだページを送り出します。インターフェースは通常のHTTPモデルに準拠していますが、MVC以外のアプリケーションに勝る利点はありません。(そして最後に、広く普及しているphpフレームワークは、実際にはHTMLではなくGUIビューに出力できません。Gtk/ Console / Webを操作できるPHPライブラリを見たことがありますが、フレームワークはできません。)

コントローラー:よくわかりません。コントローラーは、MVCモデルで長時間実行され、永続的にアクティブである必要はありません。ただし、PHPフレームワークのコンテキストでは、これらはほとんどがリクエストハンドラです。議論の余地があるものではありませんが、少し流行語のように感じます。

より良い記述子がありますか?PMVCやHMVCのような頭字語が使われるのを見てきました。そこには説明があいまいになっていますが、おそらくこれらは現在のWebフレームワークをあまり目立たなくしているのでしょうか?


したがって、結論として、PHPフレームワークは元のMVC と同様の概念を実装ます。私はそれが最高のここに釘付けだと思う:stackoverflow.com/questions/1549857/simple-php-mvc-framework/...
マリオ

「ほとんどのPHPフレームワークはビューを単なるページとして使用している」と読んで驚いた。私が使用したすべてのPHPフレームワークでは、ビューは何でもかまいません。基本的には単なるHTMLテンプレートです。したがって、テキストボックス、サイドバー、ナビゲーションバー、静的テキストのブロック、さらにはページレイアウトの場合もあります。ビュー内にビューを埋め込むことができず、実際のビジネスロジック/処理がコントローラーで事前に行われている限り、ほとんど何でもできるフレームワークは考えられません。
Lotus Notes

モデル(複数ではない)である。単一のファイルやクラスではありません。ドメインオブジェクト、データマッパー、サービスのコレクションです。これを読んでください。
ジェームズ

3
...ソ "検索エンジン最適化"?
イズカタ2013年

回答:


12

あなたはこれを完全に間違った方法で見ていると思います。GUIアプリとWebページは世界的に離れているため、MVCのまったく同じ定義が両方で機能することはありません。MVCはより理想的なものです。ディスプレイやロジックなど、アプリの特定の部分を分離します。

PHP(または一般にWeb)では、ビューはWebページ自体、つまりHTML出力です。定義どおり「ライブ」ではありませんが、リンクをクリックするだけでコントローラーに戻ります(つまり、別のページ要求)。

コントローラモデルは、あなたが説明したようなものは、違うところです。PHPでは、モデルはデータレイヤーになる傾向があり、データベースと相互作用します。しかし、それでも状況がモデル化されており、ページの読み込みごとに1回だけの場合でも、コントローラーはアプリケーションフローを制御します。

したがって、「Model-View-Controller」という名前は完全に論理的ですが、GUIアプリとWebアプリでは実装が異なります。


私はMVCの抽象的な概念に口論はしていません。PHPフレームワークが実際に単にパッシブMVCを実装することについては不誠実であるというのは私の反対です。「Model-View-Presenter」パターンでさえ、より現実的な説明です。ただし、別のドメインに適用する場合は、用語を曲げる必要があります。元の質問。ベンディングという言葉が流行語になるのでしょうか?
マリオ2010

3

私はPHPフレームワークを知らないので、これは低水準言語の観点から見られます。

モデル:

理論的には、モデルは太り、ビジネスロジックを含む必要があります

それは完全にやることです、PHPがこれと何をしているのかわかりません...

モデルは、おそらくデータベースと通信できるPHPのデータクラスであり
、同じモデルまたは部分モデルをJSON形式でクライアントに送信することもできます。

ビジネスロジックとは言えません。データロジック(検証、データベースの相互作用、インポート/エクスポートなど)に似ています。

コントローラーはシンハンドラーである必要があります(入力->出力)

コントローラークラスはモデルクラスとやり取りしますが、実際には薄いです。

出力に基づいて、モデルでいくつかのことを行います...そして、クライアントにModelViewを返します...

実際には、PHPフレームワークは浅いモデルを提唱しています。CIとSymfonyの例は、等価なモデル== ORMです。HTTP入力もコントローラーによって処理され、モデルとして扱われません。

私はそれらのPHPフレームワークについては本当に知りません...

ただし、HTTP入力はコントローラーに到達する前に処理する必要があり
ます。GETおよびPOSTデータを適切なルーティングとパラメーターに変換するクラスを簡単に作成できます。

これはまさにASP.NET MVC 2で発生することであり、問​​題
はありません。これがPHPでどのように発生するかはわかりませんが、密接に関連していると思います。

GETおよびPOSTデータをモデルに簡単に変換することもできます。モデルには、そのためのコンストラクタロジックを含めることができます。または、その目的でいくつかの個別のクラスを追加することもできます。


ビュー:

AJAXが割引された回避策では、Webページにビューを含めることはできません。PHPフレームワークはまだページを送り出します。

なぜそれができなかったのか分かりません、唯一の違いはプロトコルとPHPがJSONを返すことができることなどです...

ページはビューであり、AJAX + JSONを介して要求および更新できます。
繰り返しますが、私はこれらのPHPフレームワークを実際には認識していませんが、ASP.NET MVC 2ではそのように動作します。

インターフェースは通常のHTTPモデルに準拠していますが、MVC以外のアプリケーションに勝る利点はありません。(そして最後に、広く普及しているphpフレームワークのいずれも、実際にはHTMLの代わりにGUIビューに出力できません。Gtk/コンソール/ Webを操作できるPHPライブラリを見たことがありますが、フレームワークはできません。)

あなたが得る唯一の利点(そしてそれは通常のアプリケーションでも同じです)は、モデル(データ)+ビュー(GUI)+コントローラー(ロジック)への分離です。同様に、GUIビューの代わりに実際にHTMLまたはJSONに出力できるC ++フレームワークは表示されません。


コントローラ:

わからない コントローラーは、MVCモデルで長時間実行され、永続的にアクティブである必要はありません。ただし、PHPフレームワークのコンテキストでは、これらはほとんどがリクエストハンドラです。議論の余地があるものではありませんが、少し流行語のように感じます。

MVCは、コントローラーが実行されるソフトウェアアーキテクチャ/パターンであり、どれだけの時間をかけないかです。


1

しかし、PHP Webアプリはライブビュー(GUI要素)と永続的なコントローラーランタイムでは動作しません。

いいえ、確かにそうです!

AJAXアプリケーションについて考えると、ビューはコントローラーに何かを要求し、部分的なビューを取得します。
このビューまたはデータは、ページのどこかに入力され、ライブ更新されます。

Cookie /セッションを使用できるため、コントローラーも永続的です。

「MVC」は、PHPフレームワークの流行語のように使用されているようです。

MVCはソフトウェアアーキテクチャであり、一部のフレームワークはそれを話題として使用しますが、他のフレームワークは適切に使用します... Wikipediaでいくつかのフレームワークのリストを
参照してください。

MVCはphpプログラミングのSEOだけですか?

MVCとSEOは2つに分かれていますが、そうです... MVCの人気が高まっています。


1
確かに、AJAX UI要素はそれを近づけますが、それは客観的な回避策です。そして、それはまだ定義を曲げているようです。(ところで、私はCappucino.orgと他の実際のツールキットを知っていますが、PHPフレームワークの全体を参照していました。)
mario

それを回避策とは呼びません、Qtと他のフレームワークも回避策として数えるかもしれません...サーバーとクライアントの間のデータ転送オーバーヘッドのみがあり、現在の接続速度とレイテンシではこれはあまりありませんもう。パターンがドメインロジック(ユーザーのアプリケーションロジック)を入力と表示(UI)から分離し、それぞれの独立した開発、テスト、およびメンテナンスを可能にします。
Tamara Wijsman、2009

1
あなたの言っていることがわかります。PHPをアプリケーションサーバーとして解釈し、AJAXをロジックとUI間のRPCメカニズムとして解釈する場合は、そうです。ただし、それでもHTTPの回避策と呼んでいます。OTOHは、MVCの名称に関連しているかどうかはわかりません。"" "MVC" ""だけが、応答性のあるインタラクティブなWeb UIを提供するという意味に実際には反対していると思います。
マリオ

-1

私の意見では、phpでMVCを使用すると、プログラマーがWebにアクセスできるようになります。MVCの操作方法を知っていると、たとえばJavaからPHPに簡単に移行できます。


+1しかし、それは単なる用語の利点ですか、それともJava実装に近いPHPフレームワークがあるのですか?(そして暗黙のうちに、Java GUIまたはWeb / Strutsについて話しているのですか?)
mario

正確にはわかりませんが、zendフレームワークを使用しています。他のMVCフレームワークと同じだと思います。モデル、ビュー、コントローラーで何をするかを理解することは非常に重要であり、プログラミングの世界とインターネットスクリプトのギャップを知ることが重要です世界は閉鎖されています。多分インターネットスクリプト時代は終わった、そして私はそれを見たいと思う。バギーすぎます。
-baklap
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.