1. ホーム
  2. c#

[解決済み] ドメインオブジェクト、POCO、エンティティの違いは何ですか?

2023-02-19 15:28:29

質問

モデルオブジェクトは、基本的にどれも同じという印象があります。 モデルオブジェクトも同じなのでしょうか?

今現在、私のアーキテクチャでは

class Person 
{

    public string PersonId;        
    public string Name;
    public string Email;

    public static bool IsValidName() { /* logic here */ }
    public static bool IsValidEmail() { /* logic here */ }
}


class PersonService
{
    private PersonRepository pRepository;

    PersonService()
    {
        pRepository = new PersonRepository();
    }

    public bool IsExistingEmail(string email)
    {
        //calls repo method to see if email is in db
    }


    public Person GetPerson(email)
    {
        return pRepository.Get(email);
    }


    public void SavePerson(Person p)
    {
        if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email)
        {
            pRepository.Save(p);
        }
    }

}


class PersonRepository
{
    public void Save(Person p)
    {
        //save to db
    }

    public Person Get(string email)
    {
        //get from db
    }

    public bool IsExistingEmail(string email)
    {
        //see if email in db
    }

}

では、上記のクラスのうちどれが POCO , Domain Object , Model object , entity ?

どのように解決するのですか?

私の(非標準の)素人定義

  • POCO - Plain Old %Insert_Your_Language% オブジェクト。ロジックを持たない型。ただデータをメモリに格納するだけです。通常はオートプロパティ、時にはフィールドとコンストラクタが含まれます。
  • Domain object ドメインに関連するクラスのインスタンスです。たとえば、ほとんどの場合、ドメイン オブジェクトには、ロギング、フォーマット、シリアライズ、暗号化などのようなものは含まれません。
  • Model object と同じだと思います。 Domain object . 人々はこれを互換的に使用する傾向があります(私は間違っている可能性があります)。
  • Entity を持つクラスは id
  • Repository データベース、データサービス、ORMなどのデータストレージと、 サービス、UI、ビジネスレイヤー、その他のリクエストボディとの間で 話されるクラスです。通常、データ関連のもの(レプリケーション、コネクションプーリング、キー制約、トランザクションなど)はすべて隠蔽され、データを扱うことだけをシンプルにします。
  • Service 通常、公開 API を介していくつかの機能を提供するソフトウェアです。レイヤーによっては、例えば RESTful な自己充足型コンテナや、必要なタイプの特定のインスタンスを見つけることができるクラスとなります。

オリジナルの回答

これらは 用語 という用語がありますが、これは(分散)ドメイン駆動設計で主に使われる用語です。これらは同じではありません。用語は モデルオブジェクト の同義語として使用することができます。 ドメインオブジェクト .

ドメインオブジェクトです。 ドメインエキスパートにとって意味のあるものを表す、ビジネス特有の領域からのオブジェクト。ドメインオブジェクトは主にエンティティやバリューオブジェクトで表現されます。一般的に言えば、ドメインレイヤーに住むほとんどのオブジェクトはモデルに貢献し、ドメインオブジェクトである。

エンティティです。 オブジェクトは、基本的にその属性によってではなく、連続性と同一性の糸によって定義されます。 (意味するところ でなければならない を持つ だろう )

POCOです。 複雑なロジックを持たない単純なオブジェクトで、通常はいくつかのプロパティを持っており、ORMと併用したり、データ転送オブジェクトとして使用されます。

class Person - エンティティおよび POCO、このクラスのインスタンスはドメインオブジェクトです。

class PersonService - サービス

class PersonRepository - リポジトリ