web-dev-qa-db-ja.com

ほとんどのMVC厳格なphpフレームワーク

私は約6か月間、MVCパターンに頭を抱えています。MVCおよびHMVCパターンに関する大量の記事、Q&A、およびブログ投稿を読んだことがありますが、100%だけではわかりません。

私は広く使用されているPHP MVCフレームワーク、CodeIgniterの1つを実行してMVCを学習しようとしました。私はそれを使用して自社の内部Webサイトをいくつか実装しました。それでも、100%取得することはできません。何かを学ぶ最良の方法の1つは、厳密に定義された規則に従うことです。

つまり、私の質問は: MVCパターンの実装方法に関して、最も厳密なPHPフレームワークは何ですか?モデル、コントローラー、ビューの使用方法を定義するフレームワークです。 MVCが何であるかを完全に取得できることは?

8
kidonchu

短い答え

そのような事はありません。

長いバージョン:

フレームワークは、MVCまたはMVCにヒントを得たデザインパターンを実装していません。あなたのアプリケーションはそうします。

MVCは魔法のソースではありません。フレームワークにダンプすることでアプリケーションに追加できます。代わりに、実際に上記のパターンを学習して理解する必要があります(および付随する原則と実践、たとえば [〜#〜] solid [〜#〜]LoDSoC。そうして初めて、選択したフレームワーク内でそれを使用することができます。

フレームワークがそれを宣伝している場合 "has MVC"、それは完全に発声されますdren。そのような状況では、最新の誇大宣伝よりもアプリケーションの設計やコーディングの実践に関心を持つ初心者にフレームワークを「販売」するために使用されます。

フレームワークの目標は、ツールのコレクションを提供することです。全体として使用すると、変更/改善された開発環境が提供されます。ルーティング、オートローディング、ストレージの低レベルの抽象化(いいえ、アクティブレコードのアンチパターンについては話していません)などの処理、および開発とメンテナンスの時間を節約できる残りの処理を扱います。

結論として。

PHPにはMVCフレームワークはありません。私にそのようなことを主張する人々のすべては、実際には最悪のものの中にいます。つまり-codeigniter、cakephp、yii。すべてのコストでそれらを避けてください(あなたがそれのために本当に十分に支払われた場合を除いて)。

フレームワークを使用する必要がある必要がある場合、現在の最良のオプションは、Symfony 2.x、Zend Framework 2.xの最新バージョン、またはLaravel 4.x.これらはMVCを実装しませんが、代わりにアプリケーションアーキテクチャへの害を最小限に抑えます。

13
mefisto

私はCakeとしか話すことができず、MVCに関してはそれについて何も言えることはありません。彼らはnot MVCを正しく行います。 Codeigniterも同様です。 MVCをしばらく使用した後でも、MVCを「取得」しなかったのは不思議ではありません。

MVCは単に、アプリケーションのロジックの3つの異なるコンポーネントを適切に分離することです:アプリのコアプレゼンテーション、そして両方を実際のコンテキストで機能させるために必要な接着剤。

アプリのコアには、アプリを「アプリ」にするビジネスロジック、データベースの相互作用、サービス、ビープ音、ブープがすべて含まれています。モデルは特定の形状の特定のものではなく、アプリを機能させるために必要なものです。 one "model"のみがアプリです。

ビューは、モデルの動作を何らかの方法で出力するために使用されます。これがユーザーインターフェイスです。ユーザーに役立つ情報を表示するために必要なことは何でもかまいません。これはWebサイト、コマンドラインインターフェイス、ネイティブデスクトップGUIの場合があります。アプリでは3つすべてを使用できます。

Controllerは単に、その作業を行うために残されたものであり、主にユーザー入力を受け取り、それを適切な場所に転送するものです。さまざまな種類のコンテキスト、たとえば、 1つは着信HTTP要求を処理でき、もう1つはコマンドライン入力を処理し、もう1つはGUIイベントにフックされます。

これらの個々のパーツの具体的な形状は、アプリに完全に依存します。 3つすべては、独自のミニアプリケーションのようなものにすることができます。テンプレートプレハブフレームワークの「モデル」は、何かをすばやく起動して実行できるようにするために、1つの一般化されたケース用に作成されています。多くの場合、モデルがとるべき最適な形式ではありません。 your appの独自の構造を考え出す必要があります。構築に最適です。 OOP原則、SOLID、依存関係注入など)を調べ、これらのガイドラインに従ってコアモデルを構築します。次に、必要に応じてビューとコントローラーをラップします。

この分離のポイントは、単にアプリを保守可能および拡張可能にすることです。モデルには、入力または出力の特定の形式に固有のものが含まれていません。たとえば、フォーマット固有のテキスト(HTML形式のエラーメッセージなど)は含まれていません。特定の入力形式(HTTPリクエストなど)を想定していません。逆に、ビューにはビジネスロジックが含まれていません。その仕事はoutputを行うことです。また、コントローラーにはビジネスロジックも含まれていません。その仕事は"input"のみです。その理由は、コントローラーとビューの両方が交換可能ですが、アプリは交換できないためです。

このためのフレームワークを使用したい場合は、モジュール式で必要なことをすべて実行できるフレームワークを使用してください。 Zend、Symfony、Laravelおよび同様のコンポーネントベースのピックアンド選択フレームワークがこれに最適です。

7
deceze

このようなフレームワークは、いくつかの理由で存在できない可能性があります。

まず、MVCパターンのモデルは、アプリケーションを作成する部分yourアプリケーションです。フレームワークがモデルの外観を厳密に定義する場合、そのフレームワークは1つまたは多くても少数のアプリケーションでのみ使用できます。これにより、フレームワークとしての機能が実質的に停止します。

2番目の問題は、MVCパターンの適切なアプリケーションがどのように見えるかについて、普遍的なコンセンサスがないことです。たとえば、コントローラはモデルから必要なデータをビューに提供する必要があると言う人もいれば、ビューはそれ自体で必要な情報を取得し、コントローラがビューに場所を知っていることを確認する必要があると言う人もいます。モデルを見つけます。
Webアプリケーションに固有のもう1つの例は、ビューで実行できる処理の量です。ビューによっては、一部のプレースホルダーが実際のコンテンツ(通常はコントローラーからモデルから取得される)に置き換えられるHTMLファイルのみで構成されているものもあれば、国際化などのビューにUI関連の処理を行わせることに完全に満足しているものもあります。提示されたコンテンツの。

私はこの投稿が1年前のものであることを理解しています。それが皮肉なことに、私がこの応答を投稿している理由です。まず、この質問に答えた人の一部は正しいです。 PHP「MVC Ready」というフレームワークは、箱から出してすぐに見つけることはできません...フレームワークは、Devが構築できる基盤であるはずなので、その上で、MVCに続きます。しかし、これが投稿されてから昨年、PHPフレームワークのいくつかは、確かにlong方法。

私はCakePHPを少しいじりました、今日までそれはディレクトリと構造の恐ろしくて厄介なセットアップであり、ロジック間に明確な区別はなく、コードのコメントがかなり貧弱であり、すべてが一種のバンドルにまとめられています混乱。それはCakePHPの頭にあなたの怒りではありません、それは単純な真実です。

Zend、素晴らしいです。彼らは優れたドキュメントとコードのコメントを提供し、非常に友好的なコミュニティを持ち、初心者でも中級者でもある開発者に非常に素晴らしいフレームワークを提供します。 OPがこれを投稿して以来、彼らはlongの道を歩んできました。

そして、OPの質問に答えるそのようなフレームワークはないと言っている人々にとって、彼らは私が上で言ったように正しいです。しかし、それらもまた間違っています。 Zend、LaravelとCodeIgniterは素晴らしいフレームワークであり、MVCを「提供」していませんが、開発者として美しく構築されたMVCアプリケーションを作成するための道を確実に開いています。あなたは、開発者が適切なMVCプラクティスに従っていることを確認します。

このスレッドでCodeIgniterを言うのは恐ろしいことです。少なくとも今日の基準では、あなたはかなり間違っています。この記事の執筆時点では、私はフレームワークに夢中でなかったので、その時点ではそれを見ていませんでした。そのため、当時は恐ろしかったかもしれません。しかし、今はすべてのWebアプリケーションで使用しています。彼らは、理解可能なディレクトリ構造を備えた強固なフレームワークを作成する優れた仕事をしているだけでなく、MVCを使い始めるための素晴らしいツールを提供しています。彼らはロジックの区別で素晴らしい仕事をし、サポートのためのawesomeコミュニティを持っています、そして彼らは全体的に素晴らしい、無料のフレームワークを提供します。優れたMVCプラクティスは、いくつかの素晴らしいアプリケーションに変わる可能性があります。

要点へ。私はこの問題について自分の意見を挿入したかった。 完璧なMVCビルド済みの、すぐに使えるフレームワークを見つけることはできません。ただし、適切なMVCプラクティスを利用し、Zend、Laravelおよび/またはCodeIgniterなどの堅固なフレームワークを選択した場合は問題ありません。MVCは開発者がフレームワークではなく、どのようにして良い実践を実装するかフレームワークは基盤を提供し、残りは開発者に任されます。

参照として使用するのに適したフレームワーク

  • CodeIgniter
  • Zend Framework
  • Laravel
  • Symfony 2(コメントを読んだ後に追加されました。これは優れたフレームワークでもあるためです)

これらを使用するときは、MVCの適切なプラクティスに従うのは開発者の責任です。優れたMVCプラクティスについては、膨大な数のチュートリアルがあります。私はいくつかの素晴らしいガイドラインがある紳士のウェブサイトに偶然出会いました、そして彼は適切なMVCを目指しており、これまでのところ彼のブログ投稿はかなりうまくいっており、彼は素晴らしい場所です学習を開始します。

参照

  • トムバトラーのプログラミングブログ: https://r.je/
2
Jason

多くのチュートリアルはMVCを明確に説明するのが苦手なため、「すべてをまとめる」ことに問題があるようです。私はあなたの手を「汚い」ものにして、それらが通常どのように問題に取り組むかを見るために約3から5の異なるフレームワークでシンプルなアプリケーションを構築することを勧めます。アプリケーションの基本的なMVCアーキテクチャをセットアップする方法に関するドキュメントを持っている人もいます。そうでない場合は、その特定のフレームワークのいくつかのmvcチュートリアルをいつでもググることができます。

FWIW Zendのプロジェクト/ディレクトリレイアウトの推奨事項を気に入りました: http://framework.zend.com/manual/1.12/en/project-structure.project.html

Rasmusの「no-framework PHP MVC framework)」もご覧ください。これは、フレームワークが本当に必要ないことを示しており、特定のニーズに合わせて独自に作成できます。あなたはコメントからキックを得るでしょう! http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

1
programmer