質問: エンティティおよびバリューオブジェクトクラスでデータとビヘイビアを組み合わせることにより、モデルではドメイン駆動設計の原則に従います。私たちはしばしば顧客の行動をカスタマイズする必要があります。 FullNameのフォーマット方法を変更したいという単純な例があります: ``` public class Person { public string FirstName { get; set; } public string LastName { get; set; } // Standard format is Last, First public virtual string FullName => $"{LastName}, {FirstName}"; } public class PersonCustom : Person { // Customer wants to see First Last instead public override string FullName => $"{FirstName} {LastName}"; } ``` DbSetはDbContextで次のように構成されています。 ``` public virtual DbSet People { get; set; } ``` 実行時に、PersonCustomクラスをPersonクラスの代わりにインスタンス化する必要があります。これは、新しい人物を追加するときなど、エンティティをインスタンス化するコードがコードの責任である場合には問題にはなりません。 IoC Container / Factoryは、PersonクラスをPersonCustomクラスに置き換えるように設定できます。ただし、データを照会する際には、エンティティをインスタンス化する必要があります。 context.Peopleを照会するときに、実行時にPersonクラスをPersonCustomに置き換えるために、エンティティの作成を設定または傍受する何らかの方法がありますか? 上記の継承を使用しましたが、違いがある場合は、代わりにIPersonインターフェイスを実装できました。どちらの方法でも、両方のクラスでインターフェイスが同じになると想定できます。 **編集:**これがどのように展開されているかについてもう少し詳しく... Personクラスは、すべての顧客に向かう標準ビルドの一部です。 PersonCustomは、変更を必要とする顧客に行く個別のカスタムアセンブリに入るため、標準ビルドとカスタムアセンブリを取得します。私たちはカスタマイズに合わせてプロジェクト全体を別々にビルドすることはしません。
回答: 私は私のプロジェクトでも同様の仕事をしてきました。これを行うインターセプタの方法がありますが、2つの問題があります: 1. オブジェクトはプロキシと同期しなくなります 2. これは物事を行うための構造的に健全な方法ではありません。 そこで、 AutoMapperを使用してオブジェクトを必要な型に変換しました 。同じことをすることができる他のライブラリもあります。これにより、各ドメインで必要なオブジェクトを簡単に取得できます。 これはあなたが尋ねたものではないかもしれませんが、これがあなたに役立つことを願っています