2012-10-25 6 views
1

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) 

이 잘 나는 나는 단순히 자신을 그 밖으로 시도 할 수 나중에 업데이트 할 것입니다 :) 생각

+1

많은 솔루션이 있습니다. 상속, 구성, 터플 당신이 생각하는 것이 무엇이든간에 최선입니다. do – DarthVader

+0

상속이 문제가되지 않는다면 DTO를 단순히 상속받을 것이고 DoSomethingWithTheDTO 메서드를 호출해도 걱정할 필요가 없습니다. 신속하게 내 질문을 업데이 트됩니다. – SwissCoder

+0

나는 좋은 사람으로부터 정보를 얻었습니다. "wcf 관점에서 볼 때 데이터 계약은 메시지 구조 정의이고 메모리 내 객체가 아니라고 생각합니다. 가능하지 않을 수도 있습니다." 그게 내가 걱정하는거야! – SwissCoder

답변

2

그럼 당신이 구성 문제에 대 고전 상속에 붙어있는 것 같다.

ProductionWithAdminInfo "ISA"제품이 있는지 생각해보십시오. ISA 관계를 만족시키지 못한다고 생각합니다. 추가 관리 정보는 제품의 또 다른 속성입니다.

그래서 여기에서 구성이 좋은 것으로 보입니다. ProductWithAdminInfoDTO에는 ProductDTO 및 AdminInfoDTo가 있습니다.

+0

DTO를 상속하는 것이 유효하다고 생각 하시겠습니까? 글쎄, 내 질문을 좀 더 명백하게 업데이트 할 것이다. 당신의 대답이 내가 원하는 방향으로 가지 않는 것을 봅니다. :) – SwissCoder

+0

원하는 방향이 있다면 그냥 해보십시오. 귀하의 직감을 사용하여 :) – DarthVader

+0

내가 확실하지 않은 경우에도 귀하의 답변을 표시, 나는 ParentDTO에 대한 서비스 계약과 서비스에 InheritedDTO를 전달할 수 있습니다. – SwissCoder

관련 문제