DTO 개체 (데이터 전송 개체)를 효과적으로 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/512880

문제

DTO를 구현하는 가장 좋은 방법은 무엇입니까?

내 이해는 그들이 객체간에 데이터를 전송하는 한 가지 방법이라는 것입니다. 예를 들어, ASP.NET 앱에서 DTO를 사용하여 코드-비드에서 비즈니스 로직 계층 구성 요소로 데이터를 전송 할 수 있습니다.

메소드 매개 변수로 데이터를 전송하는 것과 같은 다른 옵션은 어떻습니까? (보낼 데이터가 적을 때 이것은 가장 쉬운 일입니까?)

데이터를 보유하는 정적 클래스는 어떨까요? (이 브레이크 캡슐화가 너무 많이 있습니까?)

모든 전송에 사용되는 단일 일반 DTO는 어떻습니까? 사용하기가 조금 더 어려울 수 있지만 작업하는 데 필요한 클래스 수를 줄입니다 (물체 혼란을 줄이면).

당신의 생각을 공유해 주셔서 감사합니다.

도움이 되었습니까?

해결책 6

모든 유용한 아이디어에 감사드립니다 ...

요약 + 이것에 대한 내 테이크 :

-이동할 소량의 데이터가 있고 이동할 장소가 너무 많지 않은 경우 일반 매개 변수로 충분할 수 있습니다.

-많은 데이터 및/또는 객체를 이동할 수있는 경우, 특별히 생성 된 객체가 가장 쉬운 객체 (DTO 객체) 일 수 있습니다.

-다양한 객체에 의해 통과되지 않고 참조 할 수있는 글로벌 데이터 객체는 눈살을 찌푸린 것처럼 보일 것입니다 ... 그러나 특정 하위 시스템 내에 위치가 없는지 궁금합니다. 데이터 통과량을 줄이는 한 가지 방법입니다. 그것은 "좋은 캡슐화"의 한계를 넓히지 만, 특정 층 내의 특정 경우에 클래스의 입자 어셈블리에 단순성을 추가 할 수 있습니다. 따라서 클래스 수준 캡슐화를 잃을 것이지만 여전히 어셈블리 수준 캡슐화가있을 수 있습니다.

다른 팁

나는 dto 's to를 사용했습니다.

  • 표준 3 계층 앱의 UI와 서비스 계층 사이의 데이터를 전달합니다.
  • 메소드 매개 변수로 데이터를 전달하여 다수 (5+)의 매개 변수를 캡슐화합니다.

'모두를 지배하는 하나의 DTO'접근 방식은 지저분해질 수 있습니다. 가장 좋은 방법은 각 기능/기능 그룹의 특정 DTO와 함께 사용하여 사용 된 기능간에 쉽게 일치 할 수 있도록 이름을 지정하는 것입니다.

나는 당신이 언급하는 방식에서 정적 DTO를 본 적이 없으며 설명하는 것처럼 DTO 싱글 톤을 만드는 것을 주저 할 것입니다.

간단하게 유지하고 하나의 DTO 클래스를 하나의 DB 테이블에 매핑합니다. 그들은 가벼워서 와이어 위에 포함하여 모든 곳에서 보낼 수 있습니다.

나는 그것이 간단 할 수 있기를 바랍니다. 시스템의 네트워크 분배 계층으로 인해 DTO가 발생했지만 도메인 객체가 레이어를 볼 수 있도록 반환되는 경우 전체 문제가 발생할 수 있습니다. 그중 일부는 다음과 같습니다.

1. 도메인 객체를 노출시키기 위해 레이어를 볼 수 있도록 도메인 객체의 구조를 알게되며, 이는 관련 객체를 사용할 수있는 방법에 대한 몇 가지 가정을 만듭니다. 예를 들어 도메인 오브젝트 "사람"이 "바운드"인 관점과 다른 관점에서 "주소"의 "주소"가 묶어야하는 경우, 응용 프로그램 계층이 시맨틱을 사용하는 경향이있을 것입니다. Person.getAddresse ()는 해당 지점에서 도메인 객체가 포인트에로드되지 않았기 때문에 woukd가 실패했습니다. 본질적으로 도메인 객체가 레이어를 볼 수있게되면 뷰는 항상 데이터를 사용할 수있는 방법에 대한 가정을 할 수 있습니다.

2.) 도메인 객체가보기에 묶여있을 때 (두꺼운 클라이언트에서 더 많은 경우), 알위 즈는 중심 논리 가이 객체 안에 들어가는 경향이있어 논리적으로 손상시킬 것입니다.

기본적으로 내 경험을 통해 도메인 객체를 볼 수있게하는 것을 보았지만 DTO를 사용한 이후 DTO를 사용한 이후도 어셈블러 생성 (DTO에서 도메인 객체 및 역방향), 증식 측면에서 추가 작업을 생성 한 이후 DTO를 사용하는 데 문제가 있음을 알았습니다. 환자 도메인 객체, 환자 DTO 및 아마도 환자 콩과 같은 유사한 물체가 볼 수 있습니다.

두꺼운 클라이언트 시스템에는 특별히 이에 대한 정답이 없습니다.

나는이 짧고 완전하지는 않았지만 DTO Cliché에 대한 진정한 대답을 빌렸다 :
http://www.theserverside.com/discussions/thread.tss?thread_id=32389#160505

데이터 세트/DataTable을 "모두를 배제하기위한 하나의 DTO"로 사용하는 것이 일반적이라고 생각합니다. 데이터베이스에서로드하기 쉽고 값을 다시 유지하면 쉽게 직렬화 될 수 있습니다.

나는 그들이 더 많이 사용하는 데 어려움을 겪고 있다고 분명히 말할 것입니다. 그들은 모든 배관을 제공하지만, 그들에 대한 프로그래밍은 통증 (많은 캐스팅, 널 체크, 마술 문자열 등)입니다. 그들과 함께 일할 수있는 좋은 확장 방법 세트를 보는 것은 흥미로울 것입니다.

DTO는 객체 사이가 아닌 와이어를 통해 데이터를 보내는 데 사용됩니다. 이 게시물을 확인하십시오.Poco vs dto

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top