문제

N-Tier 솔루션을 만들 때 비즈니스 객체를 노출시키고 싶지 않지만이 대신 DTO를 사용하십시오. 다른 한편으로, 나는 객체를 이중으로 정의하고 복사 코드를 항상 쓰고 싶지 않습니다.

이제 제 생각은 필요한 모든 필드와 속성을 포함하지만 논리 (상태 만)를 포함하는 DTO를 작성하는 것입니다.

그런 다음 해당 DTO에서 비즈니스 객체를 도출하여 DTO 기본 클래스 속성에서 작업하면서 비즈니스 로직으로 확장했습니다. 이 객체는 또한 사용 된 ORM (nhibernate)에서 지속 된 물체 일 것입니다.

이러한 접근 방식을 사용하면 서버 측에서 비즈니스 객체에서 작업하여 클라이언트에게 직접 전달할 수 있습니다 (그들은 파생되어 다운 캐스트 가능). 비즈니스 로직을 그런 식으로 노출시키고 많은 코드를 저장해야합니다.

그 접근법이 합리적이라고 생각하십니까?

문안 인사,

세바스찬

도움이 되었습니까?

해결책

다음을 고려할 수 있습니다.

"..., 왜냐하면 DTO를 도메인 객체를 알지 못하면 다른 상황에서 DTO를 재사용 할 수 있습니다.마찬가지로, 도메인 객체가 DTO에 대해 알기를 원하지 않습니다. DTO를 변경하려면 도메인 로직에서 코드 변경이 필요합니다., 유지 보수 악몽으로 이어질 것입니다.

가장 좋은 해결책은 사용하는 것입니다 어셈블러 패턴, 비즈니스 객체에서 DTO를 생성하고 그 반대도 마찬가지입니다. 어셈블러는 특수한 인스턴스입니다 맵퍼 패턴도 언급했습니다 엔터프라이즈 애플리케이션 아키텍처 패턴...."

~에서 패턴 및 실습 : 데이터 전송 객체

또한 나는 혼자서 그것을 사용하지 않았지만 당신은 체크 아웃하고 싶을 수도 있습니다. automapper 또한.

다른 팁

나에게 합리적으로 들린다. LINQ에서 SQL에서 비즈니스 객체는 부분 클래스를 사용하여 DTO에서 파생됩니다.

"그러면 나는 DTO에서 내 비즈니스 객체를 도출 할 것입니다."

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