注:ロバート・C・マーティン(別名ボブおじさん)は、彼の基調講演「失われた年の建築」でこれをより良くユーモラスな方法で説明しています。少し長いですが、たくさんの良い概念を教えています。
tl; dr:MVCの観点からアプリを考えたり計画したりしないでください。MVCフレームワークは単なる実装の詳細です。
MVCで最も紛らわしいのは、開発者がすべてのコンポーネントを接着して使用しようとすることです。
フレームワークの観点からではなく、プログラムの観点から考えてみてください。
あなたのプログラムには目的があります。データを受け取り、データを処理し、データを返します。
そうすれば、これcontroller
がプログラムの配信メカニズムです。
- ユーザーがプログラムにリクエストを送信します(たとえば、ショッピングカートに製品を追加します)。
- コントローラーはその要求(製品情報とユーザー情報)を受け取り、この要求を処理するプログラムの必要な部分を呼び出します
$user->addToCart($product)
- あなたのプログラム(この場合
addToCart
はuser
オブジェクトの関数)は、意図した動作を行い、応答を返します(言いましょうsuccess
)
- コントローラーは、関連するものを使用して応答を準備し
view
ます。コントローラーオブジェクト内$this->render($cartView('success')
このようにして、コントローラーはプログラムから切り離され、配信メカニズムとして使用されます。彼らはあなたのプログラムがどのように動作するのかを知らず、リクエストのためにプログラムのどの部分を呼び出す必要があるかを知っています。
別のフレームワークを使用する場合は、アプリを変更する必要はありません。関連するコントローラーを作成して、リクエストのためにプログラムを呼び出すだけです。
または、デスクトップバージョンを作成する場合、アプリは同じままで、配信メカニズムを準備するだけです。
そしてModel
。永続化メカニズムと考えてください。
オブジェクト指向の方法では、データを保持するオブジェクトがプログラムにあります。
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
あなたがショッピングカートに製品を追加すると、追加することができますproduct::id
にuser::shoppingCart
。
また、データを永続化する場合、model
フレームワークの一部(通常はORMを使用)を使用して、クラスをデータベーステーブルにマップできます。
使用するORMを変更する場合、プログラムは変更されず、マッピング情報のみが変更されます。または、データベースをまとめて回避したい場合は、データをプレーンテキストファイルに書き込むだけで、アプリはそのままです。
したがって、最初にプログラムを作成してください。「OO」の方法でプログラミングする場合は、言語の単純な古いオブジェクトを使用してください。最初はMVCの観点から考えないでください。