私は古いパズルを持っているので、私はあなたとそれを共有すると思った、正しい方向を得ることができるかもしれません。 データベース内のいくつかのエンティティは非常に大きく(多くのプロパティを持っています)、ビジネスロジックがすべてのエンティティプロパティを使用することはめったにないため、ビジネスロジックが正しく動作するためにロードするプロパティを考える必要があるたびにあります。非常に架空のサンプル。エンティティが多すぎますか?
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;
}
}
私はそれらの各インターフェイスを実装小さいのDTOを作成し、これらのインタフェースを実装するようインターフェースIDiscountProductとISearchResultProduct、マーク生成物を抽出ことができように見えますが、それはやり過ぎのように一瞬で見えます(少なくとも私は誰もインターフェイスを使用してプロパティをグループ化するのを見ていない)。
データベース内のエンティティをより小さなエンティティに分割することは、これらのプロパティがすべて製品に属しているため、妥当ではありません。何かを選択するために多くの結合を使用することを余儀なくされます。一部のプロパティは別のエンティティに属し、その移動は実装するのが非常に困難です。
特定のメソッドのビジネスロジックで使用されるすべてのプロパティをメソッドパラメータとして持つことは、悪い解決策のように見えます。
いくつのプロパティについて話していますか? – walther
通常は10以上20未満です。 – Giedrius
私は、あなたのメソッドが使用するプロパティを事前に知っていて、これが固定されていると、パラメータを使うことは良い解決策かもしれません。テストが簡単で、再利用が簡単です。ただし、実装がメソッドシグネチャで定義されていない場合(現在の実装では2つのプロパティが使用されていますが、明示的には3になる可能性があります)、すべてのプロパティを使用できるようにProduct全体を消費します。これは一貫した方法で話します:この方法はこれらのパラメータを必要とし、この方法は製品を必要とします。 – Polity