1

Entity Framework を使用して ASP.NET MVC アプリケーションの開発を開始しましたが、DDD を使用したいと考えています。ASP.NET (今まで PHP で使用されていた) で DDD を使用するのは初めてなので、少し混乱しています。私はコード ファーストのアプローチを使用しているので、エンティティをコアに作成してから、インフラストラクチャに DbContext を作成しています。

私の質問はデータの注釈に関するものです。コア内のエンティティに注釈を付けても大丈夫ですか? Required、DataTypeなどを使用するか、純粋なC#検証(セッターとゲッターで)を使用してエントリを作成し、データベース作成用のマップオブジェクトを作成する必要がありますか?

たとえば、次のようになりました。

public class Account
{
    public string AccountName { get; set; }
}

AccountName に [Required] の注釈を付けることはできますか? それとも、Account クラスとまったく同じプロパティを反映するが、属性を持ち、Entity Framework DbContext で使用するクラスになるマップ クラスを作成する必要がありますか?

ありがとう!

4

2 に答える 2

2

ない。

エンティティには、パブリックのゲッターまたはセッターがほとんど含まれていない必要があります。ドメイン モデルは動作モデルであり、データ モデルではありません。エンティティには、エンティティの状態を変更するプライベート フィールドとメソッドが必要です。これらのメソッドにはビジネス上の意味があり、エンティティの不変条件を保護する必要があります (入力の検証)。たとえば、UserAddress があり、それを変更したいとします。それはただuser.Address = newAddressですか?番号。それを変える意味は?多分あなたのユーザーはしたいでしょうFixMistypedAddress(str)。それともあなたのUserMoved(newLocation)?これらのシナリオでは、異なるビジネス ルールが適用される場合があります。たとえば、 UserMoved() の場合、彼にシャンパンのボトルを送りたいのですが、タイプミスを直したばかりの場合はそうではありません。プロパティを設定するだけでなく、意味のある操作を行うため、ここではデータ注釈を使用しないことは既におわかりでしょう。

エンティティは常に有効である必要があります。つまり、無効な状態にする方法はありません。データ注釈では、オブジェクトが有効かどうかを確認することしかできません。常に有効であることを保証するものではありません。

IMO データの注釈は、次の場合に適しています。

  1. CRUD アプリケーションでの Entity Framework の使用 (DDD は適用されていません)
  2. DTO または ViewModel 内。つまり、エンティティではなく、ユーザー フォームの検証用です。

したがって、最初の質問は次のとおりです。CRUD または DDD を実行していますか?

于 2012-09-24T12:31:01.887 に答える
1

どちらでもいいと言う事です。

より純粋なアプローチが必要な場合は、メタデータを持つバディ クラスを作成しますが、ドメイン クラスに直接配置することもできます。

最終的には、どれだけ「純粋」であり続けたいか、そしてバディ クラスを維持するためにどれだけ余分な作業を行いたいかということになりますが、それが悪いことであるとは言いません。

于 2012-09-17T01:50:19.977 に答える