DTOを返すサービスをいくつか受けましたが、同じDTOをさまざまなメソッドで再利用できるようになりました。
私が次のインターフェースを持っているとしましょう:
List<ProductDTO> GetProductsByReseller(int reseller)
List<ProductDTO> GetProductsByManufacturer(int Manufacturer)
List<ProductDTO> GetProductsByCategory(int Category)
それらに同じDTOを使用することは絶対に有効だと思います。なぜなら、それらはすべて実際には同じフィールドを持っているからです。
public class ProductDTO
{
public int Id { get; set; }
public string ProductName { get; set; }
public int Reseller { get; set; }
public int Manufacturer { get; set; }
public int Category { get; set; }
}
今、私はいくつかの他の方法を持っています、例えば:
List<ProductDTO> GetProductsWithAdminInfoByCategory(int Category)
この方法では、いくつかの追加フィールドを使用してDTOを拡張する必要があります。
#region only for admin
public int KnownDefects { get; set; }
public DateTime InStockSince { get; set; }
#endregion //only for admin
既存のDTOを再利用して、単に拡張しても大丈夫ですか?または、一部のフィールドがそのメソッドから使用されることはないため、新しいDTOを作成する必要がありますか?
私の考え:1つまたは2つのフィールドだけが新しい場合(他の場合は使用されない)、重複したDTOを作成する必要がなく、1つではなく2つのDTOを維持するというトレードオフが問題ないため、おそらく問題ありません。ProductDTOからAdminProductDTOを派生させるとよいでしょうが、継承がDTOに対して有効かどうかはわかりません。
まあ私は間違っていますか?新しいDTOを作成するときから、適切なしきい値(変更のnbr)は何でしょうか?
更新: ProductDTOを公開するサービスをWCFで公開する場合、KnownDefectsプロパティとInStockSinceプロパティが設定されていないか、nullの場合、それらを送信する必要がありますか?または、WCFは十分に賢く、未定義/ nullプロパティを送信する必要はまったくありませんか?(その場合、常に使用されるとは限らない2つのプロパティを持つDTOを1つだけ持っていてもかまいません。)
別の更新: ProductDTOからProductAdminDTOを継承した場合でも、それを使用して次のサービスを呼び出すことはできますか(ProductDTOのみを受け入れます)?
bool SaveProduct(ProductDTO)
まあ、私はそれを自分で試してみることができると思います、後で更新します:)