2012-01-26 5 views
1

今日はthisの記事を読んで、いくつかのことを明確にしようとしています。この記事では、モデルオブジェクトにビジネスロジックを含める必要があることを意味していますか? たとえば、Hibernateを介してデータベースから取得するStudentオブジェクトがあるとします。この記事では、ゲッターとセッターだけではなく、スチューデントオブジェクトにビジネスロジックも含めるべきだと言っていますか?AnemicDomainModel - より簡単な説明が必要

+2

基本的にはいです。ドメインエンティティに関連する複雑な動作ロジックを持っている場合、Fowlerはドメインモデルですべてを整理する必要があると言っています。 –

答えて

6

Martin Fowler氏は、8年前と同じように今日の日付を無視しています。 Fowlerはドメインオブジェクトに永続性を混ぜるべきであると述べていません。

"ドメインオブジェクトに振る舞いを入れることは、レイヤロジックを使ってドメインロジックをそのようなものから分離する堅実なアプローチと矛盾しないはずです持続性とプレゼンテーションの責任として。

記事はextermelyも、このアンチパターンを記述しているのであなたは、再び記事を読んでください、私はあなたが求めているものの文脈の中であなたのためにそれを要約してみなければならない。

あなたが作成している場合はい、ドメインオブジェクトにはビジネスロジックと状態が含まれている必要があり、ドメインエンティティの状態の変更はビジネス上の意味を伝える方法で行う必要があります。貧血のドメインモデルは、余分なクラスの層のコストがかかりますが、利益を上げていないため、パターンがありません。アクティブなレコードスタイルのアプローチ(データセットなど)を使用したのとまったく同じ意図を伝達するときに、データベースに対してマップする必要があるドメインレイヤーを悩ますのはなぜですか?したがって、記事では「学生オブジェクト」が必要だとは言わないが、そうした場合は、そのクラスに状態を確実に追加する必要があります。

ドメインをモデリングしていない場合、モデルを表すオブジェクトのセットを持っていないという記事のポイントは、今日入手できる技術のために少し混乱する可能性があります。私はPOCOのセットとデータベース(Nhibernate、EF、Simple Data、Massive、Dapperなど)の間で楽にデータを移動できる素晴らしいツールがあります。そのため、再調査では、おそらく一連の現在のほとんどのソリューションでは「エンティティ」と呼ばれていますが、実際の違いはこれが単なるデータベースモデルであるか実際のドメインモデルであるかです。

ドメインエントリポイント(コマンドハンドラ)とドメインモデルの間のやりとりの例を紹介します。以下に示すメソッドは、ドメイン内の何かを変更する要求を消費するコマンドハンドラ内に存在します。 domain-ontop-of-your-domain-codeは、単にドメインエンティティを取得し、ドメイン上の1つのメソッドを呼び出すことに注意してください。これは重要な点です。私たちがモデル化しているワークフローは、ドメインのコード層や他の場所ではなく、ドメイン内に完全にカプセル化されているからです。

public void Handle(AddEmailAddressForAlerts command) 
    { 
     var agent = _repository.GetAgent(command.AgentKey.AgentId); 
     agent.AddEmailAddressForAlerts(new EmailAddress(command.EmailAddress)); 
    } 
+0

ドメインモデルをエンティティと混在させることが多いので、すべてのドメインロジックをドメインモデル(ビジネスロジック全体の抽象化)に入れる必要があります。私たちはすべてのドメインロジックをエンティティに入れるべきです - いいえ!ドメインサービスなどがあります –

1

日付に注意してください - 引用は8歳以上です。

Martin Fowlerは明らかに非常にスマートな男です。私は記事のポイントが好きですが、塩の粒でそれを取る。状態と振る舞いを一緒にカプセル化することは一般的には良いことですが、レイヤリングの考慮事項とのバランスを取る必要があります。永続性はビジネスロジックと同じではありません。私はまだ別の永続性階層を持っています。私はモデルオブジェクトに永続性を持たせません。

ドグマはすべての形で挑戦すべきです。他の人のアイデアを認識して、自分のために考えてください。

+0

答えをありがとう。あなたは「私はモデルオブジェクトに永続性を置くつもりはない」と言った。しかし、ビジネスロジックをモデルオブジェクトに入れたいですか? –

+0

これは、はいまたはいいえの回答ではありません。私は、自分のコンポーネントを使って作られたものを使いやすくカプセル化します。サービス指向アーキテクチャーはより機能的である傾向があり、それには何も問題はありません。 – duffymo

関連する問題