1

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)

まあ、私はそれを自分で試してみることができると思います、後で更新します:)

4

1 に答える 1

2

さて、あなたは古典的な継承対構成の問題で立ち往生しているようです。

ProductionWithAdminInfo「ISA」製品かどうかを考えてみてください。ISAの関係を満足させるものではないと思います。追加の管理者情報は、製品のもう1つのプロパティです。

したがって、ここでは構成が適切な選択のようです。ProductWithAdminInfoDTOには、ProductDTOとAdminInfoDToが含まれています。

于 2012-10-25T04:33:07.507 に答える