2011-01-09 3 views
6

DTO는 데이터 전송 객체이고 BO는 비즈니스 객체라는 것을 알고 있습니다. 그러나 실제로 의미하는 것은 무엇입니까? 다른 쪽을 선택할 때는 언제 선택해야합니까? 내가 알기 론 DTO는 데이터를 전송하는 데 사용되며 비즈니스 로직을 갖고 있지 않습니다. 이것은 DTO에 메서드 만의 속성 (getter 및 setter)이 없다는 것을 의미합니까? 그러나 그것은 여전히 ​​BO의 속성을 가지고 있습니다. 누군가 설명해 주시겠습니까? 감사.DTO 및 BO 란 무엇입니까? 그 차이점은 무엇입니까?

+8

@ 밀 브라운 : 이미 내가 아는 것을 말했습니다. 내가 인터넷에서 답변을 찾을 수 없기 때문에 나는 stackoverflow에 온다. 나는 주제를 잘 이해하고 간단하고 명쾌한 방식으로 질문에 답하는 전문가가 있기 때문에 여기에옵니다. 이 질문을 한 이유를 저와 다른 사람들에게 알려주십시오. – Sandbox

+0

@Sandbox : 나는 그 용어에 대한 인터넷 검색을 할 때 정답을 얻었 기 때문에 질문을했습니다. –

+1

@Mitch Wheat : SO 또는 관련 스택 교환 사이트에 관한 대부분의 질문에 해당됩니다. 어떤 블로그 나 포럼에서 답을 찾을 수 있습니다. 누군가가 인터넷에서 검색 할 수없는 질문을 한 것은 이번이 처음입니다. – Sandbox

답변

11

DTO는 계층/계층간에 데이터를 전송하는 데 사용됩니다. 그러한 목적을 위해 그것은 어떤 metho도 필요로하지 않으며 때로는 DTO가 웹 서비스에 노출 될 때와 같은 어떤 방법도 가져서는 안됩니다.

비즈니스 개체는 데이터와이 개체에서 작업 (데이터 변경)을 수행하는 메서드가 포함 된 영리한 개체입니다. BO를 상위 레이어에 노출하면 오브젝트의 공용 메소드를 호출 할 수 있습니다. 때로는 이것을 원하지 않을 수 있으며 그 이유 때문에 데이터 만 제공하고 메소드는 제공하지 않는 DTO를 만들 수 있습니다.

DTO는 모든 BO 데이터를 전송할 필요가 없습니다. 엄격한 DTO 접근 방식을 따르면 비즈니스 계층에 노출 된 각 작업에 대해 특정 DTO를 만들 수 있습니다. 예를 들어, 개체에 CreatedBy, ModifiedBy, CreatedDate 등과 같은 감사 데이터가 있고 Update 메서드를 만드는 경우 업데이트 된 개체가있는 사용자의 DTO에는 이러한 속성이 필요하지 않습니다. 상위 계층에서 수정할 수 없으므로 비즈니스 논리 만 .

+0

그래서 DTO는 BO 레이어에서 데이터 액세스 레이어로 통신하는 데 항상 사용됩니까? – Sandbox

+0

아니요 DTO는 모든 레이어간에 사용할 수있는 일반적인 개념입니다. DTO의 가장 일반적인 용도는 프레젠테이션과 비즈니스 계층 사이입니다. 또 다른 일반적인 사용법은 계층 간 (물리적 경계)입니다. –

+0

나는 당신이 .net을 이해한다는 것을 본다 (이전의 대답에서). 그래서 3 계층 아키텍처로 WPF에서 MVVM 패턴을 사용한다면 내 VM은 DTO입니까? 또는 VM을 사용하여 디스플레이 및 DTO를 사용하여 VM의 데이터를 모델 및 모델에서 서비스로 전송할 수 있습니까? – Sandbox

1

일반적으로 DTO는 도착 단계 이전의 상대 정적 데이터를 가지고 있지만 BO는 상태 및 플로우 플래그 값을 동적으로 유지할 수 있습니다. 또한 BO는 일부 비즈니스 로직에 대한 유효성 검사 또는 논리적 재구성 또는 판단을 위해 자체 포함될 수 있습니다. 그러나 DTO의 변화는 넘어서 전달 된 계층의 데이터 변경에 달려 있습니다 ... 그러나 BO의 변경 범위는 더 넓습니다. 예를 들어, 비즈니스 흐름 상태, 플래그의 변경, 심지어 ID의 동적 업데이트로 인한 변경 실시간으로 바뀌었고, 이것들은 BO에서 반영된 것으로 간주되어 예를 들어 $ 200에서의 균형이 0이되거나 $ 2000에서 $ 5000로 균형이 잡히면 거래/거래 신원 또는 상태가 변경됩니다 ... 이것은 DTO와 BO 사이의 큰 차이.