4

현재에 설명 된대로 멀티 레이어 아키텍처를 이용하는 프로젝트에서 5 개의 레이어 (DAL, BLL, Facade, Presentation Layer 및 Common Layer)를 사용하고 있습니다.
여기 비즈니스 구성 요소와 비즈니스 엔티티 (O/R 매퍼를 사용하여 생성 된 엔티티)로 구성된 비즈니스 로직 레이어가 있습니다. 정기적으로 우리는 프레젠테이션 레이어에서이 엔티티를 바인딩하고 사용자에게 데이터를 표시해야합니다. 이 엔티티는 다른 레이어를 통해 프리젠 테이션 레이어에 이릅니다.멀티 레이어 아키텍처의 레이어를 통해 비즈니스 엔터티 전달

이제 질문은 다음과 같습니다.
올바른 방법입니까? (내가 정의한 바에 따르면, 이것을 공유해야한다면 모든 레이어에서 사용할 수 있도록 공통 레이어에 배치해야합니다.) 이 엔티티를 공통 레이어로 이동하면 안됩니까? 또는 DTO (Data Transfer Object)와 같은 것을 정의하고 레이어를 통과시켜야합니다 (물론 중복되는 것처럼 보입니다).

임의의 설명이 이해 될 것이다.

+1

다음은 도메인 엔터티 및 위치에 관한 흥미로운 시리즈입니다. http://ludwigstuyck.wordpress.com/2013/03/05/a-reference-architecture-part-1 –

답변

3

적절하게 계층화 된 응용 프로그램은 일반적으로 DTO를 사용하여 다른 이유로 인해 다른 계층의 요구에 맞게 비즈니스 엔티티가 불완전하게 왜곡되지 않도록합니다.

그러나 아주 작은 응용 프로그램에서는 DTO 매핑의 부담을 덜어주고 비즈니스 엔티티를 UI로 끝까지 전달할 수 있습니다. BLL에 보관할 수 있습니다. 모든 레이어에 참조가 있으면 극적이지 않습니다. 아키텍처를 하나의 커다란 계층으로 분류 한 이후로 실제로는 계층화 된 응용 프로그램이 아닙니다.

Mark Seemann은이 문제에 대해 흥미로운 blog post을 가지고 있습니다.

+0

링크를 제공해 주셔서 감사합니다. 매우 흥미로운. – VahidNaderi

+0

+1 : 링크입니다. – Ashkan

1

비즈니스 엔티티 만 비즈니스 계층에 보관하십시오. DTO는 초기에는 불필요한 것처럼 보일 수 있지만, 프로젝트가 성장함에 따라 DTO는 훨씬 더 평평하고 직렬화가 쉬운 유형이며 엔티티는 훨씬 더 복잡한 관계와 힘을 가지며 DTO보다 더 많은 응용 프로그램 논리를 전달합니다.

DTO는 일반 데이터이므로 이러한 이유로 DTO는 레이어간에 데이터를 전달하는 데 적합합니다. 그들은 여러분의 엔티티를 직접적으로 대표 할 필요는 없으므로 BLL을 수정해야하지만 서비스 계약을 유지해야 할 때 호환성을 향상시킬 수 있습니다.

유일한 예외는 DAL과 BLL 상호 작용 일 수 있습니다. 여기서 DAL은 엔티티를 직접 처리합니다. 그러나 여기서도 DTO가 ORM의 영향을 흡수하는 데 사용될 수 있습니다.