我得到了一些服務,我返回的DTO, 現在我可以重複使用相同的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,而維護2個DTO而不是1的交易是可以的。如果我從ProductDTO派生AdminProductDTO,可能會很好,但我不知道繼承對於DTO是否有效。
我錯了嗎? 從什麼時候開始創建新的DTO,什麼是一個好的閾值(幾個變化)?
更新: 如果我暴露了一個WCF服務,將暴露ProductDTO,它將有傳輸KnownDefects和InStockSince性能,如果他們沒有設置或爲空? 或者是WCF足夠聰明,不需要傳遞undefined/null屬性呢? (在這種情況下我也不會介意只有一個DTO與並不總是使用2個屬性。)
另一個更新: 恩,如果我繼承ProductAdminDTO從ProductDTO,我還可以調用具有以下服務它(只會接受ProductDTO)?
bool SaveProduct(ProductDTO)
嗯,我想我可以簡單地嘗試了這一點我自己,以後會更新:)
有很多解決方案。繼承,組合,Tuple無論你認爲最適合你。做它 –
DarthVader
因此,如果繼承沒有問題,我會簡單地繼承DTO,然後我不必擔心如果我調用DoSomethingWithTheDTO方法。會很快更新我的問題。 – SwissCoder
我剛剛從一個好人那得到了這些信息:「從wcf的角度來看,你的數據契約是消息結構定義,而不是內存中的對象,我想這可能是不可能的。」這就是我所擔心的! – SwissCoder