質問

MVCについての私の理解は次のとおりです(恐ろしく間違っている場合、私はやっぱり初めてです)

  1. モデルとは、データベースとインターフェイスするものです
  2. ビューはページのデザイン/レイアウトです
  3. コントローラはすべてが始まる場所であり、本質的にページロジックです

CodeIgniter を使用していますが、それだけに限らず、場合によってはPHPフレームワーク。

グローバルクラスはどこに配置しますか

製品のモデルがある場合、データベースから20個の製品を収集するクエリを実行します。今20個のモデルを作るのですか、それとも別のクラスが必要ですか?後者の場合、このクラスをどこに置くのですか(他のコントローラーも使用する必要があります)

役に立ちましたか?

解決

モデルは、製品で何をすべきかを議論するときに使用する間違った言葉です。各製品は valueオブジェクト(VO)(または口に合うものであれば何でもデータ転送オブジェクト/ DTO)です。通常、値オブジェクトには、テーブルに含まれるフィールドと同じフィールドがあります。あなたの場合、ProductVOにはProductsテーブルにあるフィールドが必要です。

モデルは、データアクセスオブジェクト(DAO)で、

のようなメソッドがあります
findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

あなたの場合、上記のメソッドのようなものを持つProductDAOがあります。このProductDAOは、ProductVOとそれらのコレクションを返します。

データアクセスオブジェクトは、複数のVOおよびビジネスケース固有の追加メソッドを含む可能性のあるビジネスオブジェクト(BO)を返すこともできます。

補遺: コントローラーでProductDAOを呼び出して、必要な製品を見つけます。 返されたProductVOは、ビューに渡されます(Javaのリクエスト属性として)。ビューは、productVOのデータをループ/表示します。

他のヒント

モデルは、ビジネスロジックが発生するアプリケーションの一部です。モデルは、次のようなオブジェクト間の実生活の関係と依存関係を表します。従業員はマネージャーに報告し、マネージャーは多くの従業員を監督し、マネージャーはタスクを従業員に割り当てることができます。モデルCANおよびほとんどの場合DOはデータベースとインターフェイスしますが、これは要件ではありません。

表示は、基本的に表示できる、または表示に役立つすべてのものです。ビューには、テンプレート、テンプレートオブジェクトが含まれ、テンプレートの構成とネストを処理し、ヘッダーとフッターでラップし、よく知られている形式(X / HTMLだけでなくXML、RSS / Atom、CSV)で出力を生成します。

Controller は、ユーザーアクションをモデル操作に変換する変換レイヤーです。言い換えれば、何をすべきかをモデルに伝え、応答を返します。コントローラーメソッドは可能な限り小さく、すべてのビジネス処理はモデルで実行し、ビューロジック処理はビューで実行する必要があります。

さて、質問に戻ります。製品ごとに個別のクラスが必要かどうかは本当に異なります。ほとんどの場合、1つのクラスで十分であり、20個のインスタンスを作成する必要があります。製品はビジネスロジックを表すため、アプリケーションのモデル部分に属する必要があります。

CakePHP には、さらに3つの<!> quot; parts <!> quot;があります。 :

  1. 動作
  2. コンポーネント
  3. ヘルパー

多くのモデルで使用されるロジックは、動作として作成する必要があります。 CodeIgniterにこのロジックがあるかどうかはわかりませんが、ない場合は、そのように実装しようとします。動作については、こちらをご覧ください。

(コンポーネントはコントローラーがロジックを共有するのを助け、ヘルパーは同じようにビューを助けます)。

最も簡単な方法は次のとおりです。

  1. データベーステーブルごとにモデルクラスを用意します。この場合、すべての製品の詳細を保持するオブジェクトになります。
  2. これらのクラスをパッケージ/ネームスペース、たとえばcom.company.model(Java / C#)に入れます
  3. DAOクラスをcom.company.model.daoのようなパッケージに入れます
  4. ビューはセッション/リクエスト/コントローラーからのデータを消費しますこの場合、リスト<!> lt; Product <!> gt;があります。
  5. ああ、PHPを使用しています。 Dunnoはそれが物事をどのように変えるかを示していますが、現代の言語のようなコレクションフレームワークがあると思います。

@Alexanderは、CakePHPの Behaviors Components 、および Helpers に言及しています。これらは、一般的な機能を抽象化するのに優れています。もちろん、ビジネスロジックの大部分がモデルに含まれているため、ビヘイビアは特に役立ちます。現在、次のような動作があるプロジェクトに取り組んでいます:

  • ロック可能
  • 公開可能
  • タグ付け可能
  • 評価可能
  • コメント可能

etc。

MVCフレームワークをも超えるコード、つまり、使用している特定のフレームワークに関連付けられていないさまざまな用途に使用するコードライブラリ-私たちの場合、ビデオエンコーディングクラスなど。CakePHPにはベンダーがありますフォルダ。

CakePHPと事実上関係のないものはすべてそこにあります。

CodeIgniterの構造はそれほど柔軟ではなく、CakePHPよりも小さく軽量ですが、 CakePHPマニュアルを参照して、ビヘイビア、コンポーネント、ヘルパー、およびVendorsフォルダがどのように役立つかを確認してください。

モデルのいくつかの一般的なヘルパークラスを含めることは簡単です。乾燥

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top