2009-12-22 2 views
4

이전 직장에서, 관리자는 DataTable의 데이터를 객체로 변환하기 위해 Translator 패턴의 사용을 제안했습니다. 기본적으로 Translator 클래스에는 정적 (즉, 클래스) 메서드 만 있으므로 함수 호출을 집계했습니다. 필자의 초기 접근 방식은 DataTable 행을 인수로 취하여 데이터에 해당하는 인스턴스를 만들 수있는 각 개체의 생성자를 구현하는 것이 었습니다.Translator Pattern

Translator 클래스는 Microsoft에서 제안했으며 더 우수한 모듈성을 제공한다고 그는 말했습니다. 나는이 점을 볼 수 있지만 동시에 Visitor 패턴이 비슷한 특성을 가지고 있음에도 불구하고 매우 OO 방식이 아닌 것처럼 보입니다.

이 패턴을 사용한 사람이 있습니까? 어떻게 생각하십니까? 장점과 단점?

답변

3

C2.Com에서 Translator 패턴은 방문자 패턴의 비 OOP 구현입니다. 메모와 OOP 의미론에서 (코드가 아닌) 표현하기가 어렵다는 점을 포함하여 몇 가지 단점을 지적하고 기사의 끝 부분에 설명합니다. 즉, 잘 작동하지만 이해가되지 않을 수도 있습니다. 나머지 코드에서는 순수 OOP를 사용합니다.

+0

감사합니다. GrayWizardx! –

0

외부 종속성없이 매핑을 수행 할 수있는 경우 정적 메서드 이외의 다른 기능을 사용하는 데 실제로 사용되지 않습니다.

-1

어쩌면 내가 누락 된거야,하지만 왜 linq을 사용하지?

IEnumerable<Customer> customerQuery = 
    from cust in customers 
    where cust.City == "London" 
    select cust; 

foreach (Customer customer in customerQuery) 
{ 
    Console.WriteLine(customer.LastName + ", " + customer.FirstName); 
} 

어쨌든 TranslatorPattern은 하나의 표현에서 다른 구조로 데이터 구조를 변경하는 것에 관한 것입니다. 여기 http://c2.com/cgi/wiki?TranslatorPattern에 대한 자세한 정보입니다.

+1

그의 질문은 번역기 패턴에 관한 것이지, 작업을 수행하는 방법에 관한 것이 아닙니다. 또한 OP는 그가 특정 버전의 프레임 워크를 사용하고 있다고 말하지 않으며, Linq는 그의 경우 적합하지 않을 수 있습니다. – GrayWizardx

+0

매우 사실입니다. 그럼에도 불구하고 유사한 작업으로이 페이지에서 다른 사람들에게 우아하게 작업을 수행하는 방법에 대한 코드 예제를 제공하고 자체 학습을 위해 TranslatorPattern 원본 소스에 URL을 제공했습니다. –

+0

@GrayWizardx, 오른쪽. 내 상황에서 나는 API를 다루고 있었다. 문제가 쿼리와 관련이 없으므로 Richard의 쿼리 예제가 무엇인지 잘 모르겠습니다. –

4

나는 Entity Translator에 대해 이야기하고 있다고 생각합니다. 이 시나리오의 번역자는 당연히 정적 인 방법이라고 생각합니다. 그것이 사는 곳은 미학의 문제입니다. 또한 두 단위의 데이터 구조에 의존성을 가져야하므로 단위 테스트를 아주 쉽게 수행해야합니다. "데이터 계약"의 다른 이름과 같은 종류의 소리는 DTO (데이터 전송 개체)입니다.

+0

감사의 말 Igor은 Entity Translator와 일반적으로 Microsoft Patterns의 존재에 관한 유용한 링크였습니다. –