2009-04-20 4 views
1

비즈니스 로직을 위해 WCF 서비스에 연결하는 웹 응용 프로그램이 있습니다. 성능 및 상호 운용성을 위해 WCF 경계에서 데이터를 전송하는 데 간단한 Dto를 사용하고 싶습니다.Dtos와 함께 형식화 된 데이터 집합

그러나 데이터 액세스를 위해 입력 된 데이터 세트를 사용해야합니다 (정치적 이유로 ORM 또는 다른 옵션을 사용할 수 없음).

입력 된 데이터 세트와 함께 Dto를 사용하는 것이 좋습니다. 아무도하지 않았습니까? 권장 패턴이 있습니까? 그리고 가장 중요한 것은 형식화 된 데이터 세트에서 Dto를 자동 생성하는 라이브러리/도구/메소드가 있습니까?

답변

0

형식화 된 DataRow-s, DataTable-s를 사용하는 것이 좋습니다. 형식화 된 DataRow와 Dto 객체는 별 차이가 없습니다. 성능면에서 현명한 Dto-s가 도움이 될 것입니다 (필자는 의심 스럽습니다). 상호 운용성에 관해서는 형식화 된 DataRow-s는 일반 클래스이므로 Dto 개체와 마찬가지로 상호 운용 가능합니다.

+0

DTO들이 DataContracts에 표시되지 않은 그대로 데이터 행을 사용의 문제 :

은 여기에 신속하고 더러운 PSUEDOCODE의 예입니다. 그들은 심지어 직렬화 할 수 없습니다. 우리는 Dtos와 직렬화 데이터 세트 간의 차이점을 테스트했으며 성능에 상당한 영향을 미칩니다. – Ender

2

엔티티 번역 패턴이 마음에 듭니다. http://msdn.microsoft.com/en-us/library/cc304747.aspx
음, 아마도 변형 된 것일 수 있습니다.

나는 최근에 비슷한 것을해야했고, datarow/datatable에 저장된 데이터를 데이터 계약 객체로 변환하는 또 다른 "계층"을 만들었습니다. 서비스 계층은 데이터 액세스 방법의 결과를 매개 변수로 사용하여이 새 계층 메서드를 호출 할 수 있습니다.

public class personTranslator 
{ 

    public static PersonDataContract TranslateToContract(Datarow personDataRow) 
    { 
     PersonDataContract resultPerson = new Person; 
     resultPerson.FirstName = personDataRow["FirstName"]; 
     resultPerson.LastName = personDataRow["LastName"]; 
     . 
     . 
     [etc.] 

     return resultPerson; 
    } 
} 

SERVICELAYER 잘 클래스

public PersonDataContract GetSpecificPerson([Parameters]) 
{ 
    [other setup/validation code...] 
    return PersonTranslator.TranslateToContract(PersonDataAccess.GetPersonRow([Parameters])); 
} 
관련 문제