私はモデルとコントローラーを開発した後、初めてのビューを実装する段階にありますが、問題があります。
私は読んでいます MVCに関するこの記事 、これは実装時に目指していたものですが、コントローラーを作成するときは、振り返ることを覚えていなかったので、スクリプトから外れました、それだけの助けになったとは思いません。
現在、私のコントローラーにはメソッドが含まれています:
public function add($name, $price, $dimensions): string
public function remove($sku): void
public function removeAll(): array
public function updatePrice($sku, $price): void
しかし、View
を作成するとき、コントローラーにモデルからのデータを要求しない限り、エンティティーをリストするためにデータベースアクセスを実装する必要があることに気付きます。それは私には一種の間違っているように見えますが、上記の記事のいくつかの説明を考えると、これは必要なようです。
すでにデータベースにアクセスしているクラスから「取得」機能を提供することは、私には最もきちんと思われます。要するに、ビューはデータベースと直接インターフェースすべきですか?
真の [〜#〜] mvc [〜#〜] の場合、コントローラーはユーザーから入力を受け取り、ビューを制御するためのコマンドに変換します(たとえば、新しいビューを作成するか、ビュー)またはモデルの場合(例:価格の更新、変更の保存など)。
説明するメソッドはコントローラーではなくモデルに属します。価格付きアイテムの追加、価格の更新、在庫管理単位(SKU)の削除、およびすべてのアイテムの削除は、モデルの責任です。あなたの記事を引用するには:
モデルは、設計全体で使用されるデータの永続的なストレージに付けられた名前です。データを表示または収集して書き込むためのアクセスを許可する必要があります(...)
コントローラーは、情報のコレクターとして単純にまとめることができ、それをモデルに渡して保存用に編成します。入力を収集するために必要なもの以外のロジックは含まれていません。 (...)
開発者が犯す最も一般的な間違いは、コントローラーをゲートウェイと混同することです(...)
そのため、コントローラはデータベースへの単なるゲートウェイではありません。すべてのデータベース相互作用はモデルに属します。コントローラーとビューはデータベースについて何も認識していません。それらはモデルについてのみ認識しています。
上記の原則をすべて共有するいくつかのMVCバリアントがあります。あなたの記事では、ビューごとに1つのコントローラーがあります。
ORMは、オブジェクト(アプリケーション)とテーブル(データベース)の間のマッピングを作成し、 データベースへのアクセス を容易にします。 MVCアーキテクチャでは、ORMを使用してモデルを実装します。モデルを置き換えることはできません。
アーキテクチャが異なれば、責任の配分も異なる場合があります。しかし、それはもはやMVCではありません。
「MVCはかなり抽象的なガイドラインです。」すべての状況がそれに準拠しているわけではありません。 、「それらのどれもしない」と言うでしょう。しかし、(少なくとも、私にとっては)それは実際には大丈夫です。それにもかかわらず、本当の肉とじゃがいものための一般的な戦略として、「それにもかかわらず、一般的なアイデアは有用です」:「懸念の分離」