モデルを設定してデータと検証を取得する以上のことを行う方法


8

私がこの質問をしているのは、フレームワークでいくつかの小さなカスタムcmsソリューションを開発した後、モデルをORMで簡単に置き換えることができ、データの検証、取得、設定のタスクを容易にするというアイデアが生まれたからです。 。
最近、複雑なカスタムクライアント管理ソリューションの注文を受けました。それを進める方法について少し調べた後、私はこれを見つけました:
http : //blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/

Now私がMVCアプローチについて読んだことは、モデルがビジネスロジックを処理するため、アイデアは新しいものではありません。しかし、モデルがビジネスロジックを処理し、慣れ親しんだ作業のタイプのために、それ自体が完全なクラスであるアプローチを計画するのは難しいと感じています。
アイデアを説明し、いくつかの例や記事などを示して、ここで私を助けてください


いい質問です 私はこれについてこれまで考えたことはありません。
Saeed Neamati、2011

素敵なリンク...あなたが使用している開発技術は... ASP.Netですか?
IAbstract 2011

IAbstract、私はphpの開発技術の黒い羊を使用しています。ただし、5.3以降はかなり良くなっています。codeigniterで動作していましたが、fuelphp(基本的にはphp5.3の
codeigniter

回答:


5

ドメインドリブンデザインの詳細をお読みください。基本的には、ビジネスの要件を、必要なすべてのビジネス論理タスクを実行できる純粋なモデル(大部分はオブジェクトモデル)に取り込もうとします。このモデルは、アプリケーションレイヤーから呼び出すことができます(たとえば、MVCのビューまたはコントローラー、MVPでは、それを呼び出し、PresenterのGUIに合わせて調整します)。モデルはまた、永続性やその他の技術的な事柄を可能な限り知らないようにする必要があります。

このようなドメインモデルにビジネスロジックをカプセル化すると、いくつかの大きな利点があります。

  • 再利用性
  • 使いやすさと拡張性
  • 一般的にはより良いアーキテクチャにつながります
  • 一貫性とビジネス要件を明確に伝えます...
  • ...開発者、顧客、アナリストなどの間のコミュニケーションを改善します。

ドメインドリブンデザインに関するEric Evanの本をお読みになることをお勧めします。正​​しい方向を示し、どのロジックをどこに配置するかについての良い例を示します。きっとあなたがそれを読んだ時点で、あなたのエンティティの大部分はフラットなデータ以上のものを含んでいるでしょう。

しかし、モデルがビジネスロジックを処理し、それ自体が完全なクラスであるアプローチを計画するのは難しいと感じています。

モデルでは、主にこのコンテキストでエンティティを参照していると思います。エンティティにビジネスロジック/動作を組み込むことは、簡単な作業ではありません。しかし、あなたは常にエンティティが何を考えるべきであると実体が何を行いますそれにはいくつかの責任や行動がありますか?行動や責任がサービスとしてより適切に表現されている場合は、エンティティがフラットであっても問題ない場合があります。

動物がいるとしましょう。その属性はデータベースにフラットに保存できますが、動作もあります。食べる必要があります。しかし、草食動物は肉を食べないので、プログラマーが肉を強制的に消費させたいときに、その行動を確実に示す必要があります。それは動くことができ、それはそれ自身の独特のノイズを作ることができます。これらは、たとえばエンティティにモデル化する必要があるものです。これらの動物に食べさせたり、動かしたり、騒がせさせたりするために、手続き的なサービスに頼る必要はないでしょう。

しかし、すべての例は具体的なビジネスドメインなしでは浅いです。だからあなたのビジネスドメインとそのエンティティ、行動、責任について考えてください。他のビジネスドメインには、部外者にはほとんど同じに見えるエンティティが含まれている可能性がありますが、実際にはまったく異なるものであるか、まったく異なる動作を示します。モデルは何よりもまず、ユーザーのドメインをできるだけ正確に描写する必要があります。


それは非常に有益な答えです。ありがとう。私が理解していることから、必要な機能を追加するためにormクラスを拡張する必要があるかもしれません。つまり、ORMレイヤー上にモデルの2番目のレイヤーを定義し、ORMレイヤーが機能するオブジェクトにビジネスロジックを適用します。私はそれを正しく理解していますか?(また、私はすぐにその本を注文しています)
kapv89

もう編集できませんが、ORM計算を拡張することで、データベースを表すモデルを拡張することを意味します
kapv89

@ kapv89:主に転送のために、クラスをラップ/拡張する方が良い場合があります。さらに洞察を得るために、DTOパターン(データ転送オブジェクト)を参照してください。
ファルコン

私はあなたがあなたの投稿で言ったことについて考えて、脂肪モデルとドメイン駆動設計について読んでいます。このプロジェクトの進め方については、もう少し考えていると思います。ありがとう。私はその本も注文しました。このプロジェクトに取り組んでいる間にそれを読みます
kapv89
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.