2011-02-01 9 views
13

私はMVCアーキテクチャを手続き型に適用できるかどうか、これを自分のコードにどのように実装できるかを調べようとしています。私の理解から、MVCは基本的にビジネスロジック、プレゼンテーションレイヤー、およびその他のロジックの分離を表していますが、特にOO-PHPを目指しているようです。MVCデザインパターンを手続き型PHPに適用することができます

手続き型コンテキスト内でMVCにアプローチする最良の方法をお勧めしますか?

ありがとうございました。

+1

+1ダニエル良い質問、私はこのように何かを見ている長い時間があり、今まで私は良い答えがない、誰かがあなたに良い答えを与えることを願っています。基本的に手続き型のプログラミングスタイルは、同じ場所にある多くの命令です。つまり、長いコード、難しいメンテナンスなどを意味し、OOではそれが異なります。いつか前に、私は3つの異なる部分でmysqlfを探しました。 Bussines Logic、テンプレート(インターフェース、テンプレートロジックを持つことが可能です)、最後にデータ抽象化です。一般的にMVCはこのようなことをしますが、あなたが使っているフレームワークに依存します..少し複雑です.. – B4NZ41

+0

私は、Procedural PHPを使って新しいプロジェクトを開始することを非常に躊躇しています。古いプロジェクトでMVCを使用する場合:OOPでプロジェクトを書き直します。私を信じて。 OOPはあなたのプロジェクトをまったく新しい世界に開きます。 – Shoe

+0

ええ、私はOOを正しく働かせて、私のコードにMVCアーキテクチャを実装したいと思っています。私はフレームワークを使用していない、私はゼロからコーディングしています。 –

答えて

10

MVCは、オブジェクト指向のパターンであり、あなたが手続きのコンテキストでそれにアプローチしたいと思います。

これは間違っています。 MVCはオブジェクト指向のコーディングとは関係ありません。

MVCは、ユーザの情報表現とのインタラクションから情報表現を分離することを目的とするソフトウェアアーキテクチャパターンです。

どのように達成するかはあなた次第です。あなたは、オブジェクト指向、手続き的、機能的、そして必要でない何らかのコーディング形式を使用して達成することができます。

手続きに関する質問:手続き型PHPをコーディングするときにMVCパターンを達成する最も簡単な方法は、それぞれの特定の関数が独自のタスクを持つ多くの小さな関数を使用することです。関数に多くのタスクを持たせないでください。そうすれば、物を分けるのがより簡単です。また、同じファイルに多くの機能を保持しないでください。むしろ、関連する関数をそれぞれのグループ内の小さなグループ(実際にはクラスでOOで何が行われるか)でまとめます。

誰かがOOのない単純な例では、MVCとここにそれをしない:絶対http://www.fluffycat.com/PHP-Design-Patterns/Non-OO-MVC/

+0

うん、私は同意する必要があります。これはかなり後になった。実際にあなたの例に似た何かをやってしまった。 OOを使う方が簡単ですが、別の機能を作成する必要があります。 –

11

うん、MVCまとめについてその...しかし、オブジェクト指向である必要はありません...あなたはわずか数黄金のルールに従う必要があります。

  1. コントローラが受信して、入力を処理し、任意のデータを生成し、モデルに格納します。
  2. ビューは、モデルからデータを取り出してレンダリングします。
  3. コントローラは、ビューのデータをフォーマットするべきではない - それはなぜ/ビューが何を望ん(出力がJSONかもしれないので、例えば、テキスト文字列にHTMLを挿入しません)どのように/の知識を持たないはず
  4. ビューがすべき自分自身のためにデータをルックアップしません。モデルにない場合、コントローラはそのジョブで失敗しました(エラーをスロー/レポートします)。

これ以外にも、あなたが望むことはできます。基本的にはコントローラとして動作する一連の手続きが必要です - $_REQUESTのVars(GET/POST/COOKIEの可能性が高い)を解析してデータ検索ビルディング+モデルの充実を行い、次に別の一連の手続きをビューとしてモデル内でそれをレンダリングし、ユーザにレンダリングします。このモデルは、連想配列のように単純なものにすることができます。

+0

ありがとう、私はちょうど私のモデルとビューを別々のファイルに分ける必要があり、私はこれをソートしなければなりません。ただ一つの簡単な質問、すべてのリクエストはindex.phpファイルを通らなければならないのですか、それとも文字通りlikeなのでしょうか?search.phpに行くためにnavをクリックすると、検索ページはモデルとビューにアクセスできますコントローラー経由の検索機能? –

+3

絶対に。デザインパターンはそれ以上のものではありません。 +1 – ircmaxell

+2

各 '.php'ページにコントローラコール(何も出力しない)とビューコールがある限り、それを別のページに分割することはできません。 – Rudu

0

これはちょっと奇妙です。 MVCはオブジェクト指向のパターンであり、手続き型のコンテキストでそれにアプローチしたいと考えています。

私の頭に浮かぶのは、には、HTMLコードからPHPを分割するためのテンプレートエンジンがあります。これは手続き型のMVCに向けて大きな一歩となるでしょう:)

次は、接頭辞付きの同じグループ(つまり、関連オブジェクトのロジックを含む関数)の関数に名前を付けることです(クラス名の下にメソッドをグループ化するのと同じです) 。

例えば - のmysqlで作業するためのPHPに手続きの機能を見て:

mysql_connect() 
mysql_real_escape_string(); 
mysql_select_db(); 
mysql_query(); 

など とグループこれらの機能を別々のファイルに。これはロジックのビットをデカップリングするのにも役立ちます。

何かが私の心に来る場合、あなたが最も可能性の高いリファクタリングまたはゼロから何かを書いている新しいデザインパターンを実装している場合、私は私のポスト:)

+0

ありがとう、私は実際にこれに取り組む方法がわかりませんが、私はOO-PHPで試しましたが、アーキテクチャを正しく実装するにはいくつかの問題がありました。 –

0

を編集します。 MVCを使用する予定がある場合は、OOPに移行することを強くお勧めします。それは手続き的に実装することができますが、非常にハックされ、良い解決策ではありません。

あなたが簡単にピックアップできるいくつかの無料のMVC PHPソリューションがあります。ここではいくつかある:

  • Zend Frameworkの
  • Kohanaの
  • コードIgnighter
+1

ありがとうございますが、フレームワークを使用するのではなく、ゼロからコードを作成する必要があります。 –

+0

良い選択。独自のフレームワークを作成する方が良いです。 – Shoe

+0

私はしたいと思うが、どこから始めたらいいのかわからない! –

0

。次の組み合わせを使用してください。

  1. インクルードファイルを使用してください。
  2. 機能を使用します。
  3. ソースファイルを区切ります。
  4. ソースファイル内でコードのセクションを分割します。
  5. コードブロック(中括弧)を使用します。
  6. PHPファイル、HTMLファイル、JSファイルを別々にします。

モデル、ビュー、およびコントローラの行に沿ってコードを整理するものは何でもあります。あなたの手続き型コードをより意味のある形に整理したり、MVCについてもっと教えてくれれば、それは良いことです。

関連する問題