[解決済み] ドメインオブジェクト、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
- リポジトリ
関連
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] 2つのリストを結合する
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] C#では、public、private、protected、アクセス修飾子がないことの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】平凡なCLRオブジェクトとデータ転送オブジェクトの比較