2009-07-15 3 views
3

私はMVCの新人ですが、私はすでにその利点と利点を見ることができます。しかし、私は(おそらく簡単に答えることができる)設計質問を持っています:MVCアーキテクチャモデルには何がありますか?

私はモデルについて考えていて、それらを構造化する正しい方法を議論しています。私はそれを見る方法にはいくつかのオプションがあります:

1)モデルとテーブル構造には1対1の関係があります。モデルクラスは、テーブルの列に対応する属性を持ち、必要な方法でテーブルのデータを操作するために必要なメソッド(getterやsetterなど)を持っています。これは一般的なオプションのようだと私はコントローラが必要なビジネス機能を実行するために必要なモデルを呼び出すだろうと思う。

2)モデルは、データではなくビジネスロジックの操作により密接に結びついています。たとえば、フロントエンドで特定のオブジェクトの削除が複数のテーブルに影響を及ぼす場合、モデルはこの動作をモデル化し、いくつかのテーブルと相互作用し、必要な機能を実行します。コントローラーは、ビジネスのふるまいが必要な場合に単一のモデルを呼び出すだけで済みます。モデルははるかに緊密に結合されているため、これはあまり一般的ではありませんが、実装するのが早くなりそうです。

3)最初の2つのオプションの間に何かがあります。あるいは、私はその点を完全に見逃しているかもしれない。

これはうまくいけばうまくいきます。私がその点を完全に欠いているわけではないなら、私はオプション(1)が良いと思う傾向がある。何か案が?

編集:それは問題ではありませんが、私はCodeigniter PHP MVCフレームワークの使用を予定しています。

+0

MVCのモデルをもう少し詳しく定義したポストを最近投稿しました。http://www.lavinski.me/mvc-architecture/ –

答えて

0

1番は道です。オプション2は実際にコントローラの仕事です。たとえば、コントローラーはモデルを取り出し、そのモデルに対してアクションを実行し、その結果をビューに渡します。

それの

だと思い、このよう:これは非常にある

モデル =あなたのデータ

コントローラ =ビジネス・ロジック

ビュー =データの表示とアクションシンプルではありますが、私はシステムを設計するときに、私の心の中でそれを描いています。

+0

うわー、数秒でパンチに私を打つ! :-) –

+0

とそれに続くリポジトリ==データアクセス層 –

+2

あなたのモデルにBossオブジェクトへの参照を含むEmployeeオブジェクトがある場合、コントローラーにEmployeeを手動で取り込ませるのではなく、モデルがEmployeeが取り込まれたときに両方とも取り出さないのはなぜですか? – womp

0

モデルとしてのデータベース、コントローラとしてのビジネスロジック、およびビューとしてのUIを考えます。それは助けるかもしれません。これは、物事に対する過度に単純化されたアプローチですが、データ/動作の分離を大まかにします。

1

上記のすべてです。

使用するアプローチは、設計思想によって異なります。ビジネス・ドメインを使用してアプリケーションを設計し、それをデータベース設計に活用することを好む場合は、2番目のアプローチを優先します。最初にデータベースを構築してから、データベーススキーマからモデルクラスを作成したい場合は、最初のアプローチを優先します。どちらの方法も、ソフトウェアを構築するための有効な方法です。

5

どちらも有効な実装であり、必要に応じてうまく動作します。

#1は基本的に、サブソニック、キャッスル、その他多くのORM実装で使用されているActive Record patternを表しています。

#2は、Entity Framework/Hibernate/LightSpeedのアプローチであり、テーブルではなくドメインに概念的に関連したオブジェクトを扱っています。外部キーIDプロパティを含むオブジェクトの代わりに、実際には他のドメインオブジェクト参照が含まれます。これらのオブジェクト参照は、オンアクセスでインスタンス化されます。

どちらも優れています。アクティブレコードのアプローチは、通常、初心者にとっては直感的で、潜在的に落とし穴が少なくなります。 EF形式は、多くの基本レベルのコードを保存し、コード内でFKを直接扱うことができます。

編集:明確にするために、両方の状況で説明するものは、データアクセスレイヤに関連し、厳密にモデルに関連しています。しかし、現実には、ほとんどのモデルがこれらのタイプのオブジェクトのうちの1つ以上を単に表す傾向があるので、あなたはかなり近づいています。

0

私はそれがどちらか/または状況である必要はないと思います。あなたの最初のポイントはモデルと呼ばれるものですが、2番目のポイントはView Modelのように聞こえます。View Modelは、多くの場合、さまざまなモデルと、モデルの一部で構成され、ビューに送信されます。コントローラは、情報がビューから返されたときに、その合成を行い、分解する可能性があります。

関連する問題