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; }
}
는 이제 예를 들어, 몇몇 다른 방법이있다 : I는 추가적인 필드로 DTO 연장 할 방법이
List<ProductDTO> GetProductsWithAdminInfoByCategory(int Category)
.
#region only for admin
public int KnownDefects { get; set; }
public DateTime InStockSince { get; set; }
#endregion //only for admin
기존 DTO를 재사용하고 간단하게 확장해도됩니까? 또는 일부 필드가 해당 메서드에서 사용되지 않기 때문에 새 DTO를 만들어야합니까?
내가 생각하는 것 : 하나 또는 두 개의 필드가 새로운 경우 (다른 경우에는 사용되지 않음), 중복 DTO를 만들 필요가 없으며 1 대신 2 개의 DTO를 유지 관리해야하는 번거 로움이 없으므로 . 아마도 ProductDTO에서 AdminProductDTO를 파생시키는 것이 좋겠지 만 상속이 DTO에 유효한지 여부는 알 수 없습니다.
글쎄, 내가 틀렸어? 새 DTO를 만들 때부터 언제 좋은 기준치 (변경 사항의 nbr)가 될까요?
업데이트 : 나는 ProductDTO 노출 될 수 WCF에서 서비스를 노출하는 경우가 KnownDefects하고이 설정되지 않은 경우 InStockSince 속성 또는 null를 전송해야합니다? 또는 WCF는 충분히 똑똑하고 정의되지 않은/null 속성을 전혀 전송할 필요가 없습니까? (이 경우 항상 사용되지 않는 2 곳과 하나의 DTO를 가지고 상관 없어.)
또 다른 업데이트 : 내가 ProductDTO에서 ProductAdminDTO을 상속 글쎄, 난 여전히 다음과 같은 서비스를 호출 할 수 있습니다 그것은 (그것은 단지 ProductDTO를 받아 들일 것입니다)?
bool SaveProduct(ProductDTO)
이 잘 나는 나는 단순히 자신을 그 밖으로 시도 할 수 나중에 업데이트 할 것입니다 :) 생각
많은 솔루션이 있습니다. 상속, 구성, 터플 당신이 생각하는 것이 무엇이든간에 최선입니다. do –
DarthVader
상속이 문제가되지 않는다면 DTO를 단순히 상속받을 것이고 DoSomethingWithTheDTO 메서드를 호출해도 걱정할 필요가 없습니다. 신속하게 내 질문을 업데이 트됩니다. – SwissCoder
나는 좋은 사람으로부터 정보를 얻었습니다. "wcf 관점에서 볼 때 데이터 계약은 메시지 구조 정의이고 메모리 내 객체가 아니라고 생각합니다. 가능하지 않을 수도 있습니다." 그게 내가 걱정하는거야! – SwissCoder