私は古いパズルを持っているので、それをあなたと共有しようと思いました、正しい方向に進むかもしれません。つまり、データベース内のエンティティの一部は非常に大きく(読み取りには多くのプロパティがあります)、ビジネスロジックがすべてのエンティティプロパティを使用することはめったにないため、ビジネスロジックが正しく機能するには、どのプロパティをロードする必要があるかを考える必要があります。非常に架空のサンプル:
public class Product
{
public string Title {get;set;}
public string Description {get;set;}
public string RetailPrice {get;set;}
public string SupplierId {get;set;}
public Supplier Supplier { get;set;}
// many other properties
}
public class ProductDiscountService
{
public decimal Get(Product product)
{
// use only RetailPrice and Supplier code
return discount;
}
}
public class ProductDescriptionService
{
public string GetSearchResultHtml(Product product)
{
// use only Title and Description
return html;
}
}
インターフェイスIDiscountProductとISearchResultProductを抽出し、それらのインターフェイスを実装するものとして製品をマークしてから、これらの各インターフェイスを実装する小さなDTOを作成できるようですが、現時点ではやり過ぎと見なされます(少なくとも、インターフェイスを使用してプロパティをグループ化する人は誰もいません) 。
データベース内のエンティティをより小さなエンティティに分割することも合理的ではありません。これらのプロパティはすべて製品に属しているため、何かを選択するために多くの結合を使用する必要があり、一部のプロパティがに属すると判断した場合は別のエンティティ、その動きは実装するのが非常に難しいでしょう。
すべてのプロパティを特定のメソッドのビジネスロジックでメソッドパラメータとして使用することも、悪い解決策のように見えます。