문제

3 개의 레이어 아키텍처가있는 asp.net 앱이 있습니다.

  • 프리젠 테이션 계층 : ASP.NET

  • 비즈니스 레이어 : C# 라이브러리.

  • 데이터 액세스 계층 : C# 라이브러리
    ado.net 엔티티 프레임 워크 개체.

Bussiness 계층의 일부 방법은 Ado.net Entity 객체를 반환하지만 프리젠 테이션 계층에서는 데이터 액세스 계층이 표시되지 않습니다.

내 질문은 : 디자인보기에서 프레젠테이션 레이어에 엔티티 객체를 노출시키는 것이 정확합니까? 데이터 레이어 라이브러리를 ASP.NET 앱과 연결하면됩니다.

고맙습니다!

도움이 되었습니까?

해결책

View Objects ... 또는 데이터 전송 객체 (DTO)의 개념을 살펴 보는 것이 좋습니다. Automapper 또는 이와 유사한 도구를 사용하여 엔티티에서 뷰 특정 도메인 객체를 생성하는 것을 고려할 수 있습니다. 일반적으로 작업을 수행하기 위해 존재하는 엔티티가 필요한 화면이있을 수 있습니다. 그러나 종종 당신은 여러 다른 엔티티를 통과해야합니다. 이 경우 이러한 모든 엔티티를 포함하는 하나의 DTO를 만드는 것이 좋습니다. 이렇게하면 프레젠테이션 계층과 비즈니스 계층 사이에 분리 계층이 추가됩니다. 종종 당신의 엔티티가 프레젠테이션 계층에 노출하려는 것보다 더 많은 힘을 가지고 있습니다. 그 반대. 비즈니스 계층에 표시된 일부 검증을 기반으로 일부 UI 메시지를 프레젠테이션 계층으로 가져와야 할 수도 있습니다. UI를 전체 엔터티를 통과하여 UI를 더 복잡하게 만드는 대신 UI가 DTO 형태로 필요한 것만 전달할 수 있습니다. 또한 비즈니스 개체가 프레젠테이션 계층에 특정한 것에 대해 관심을 가질 필요는 없습니다. 데이터 액세스 계층만큼 멀리 떨어진 곳에 직접 데이터를 데이터에 데이터를 바르지 않는 것이 좋습니다. 기술적으로 프리젠 테이션 계층은 비즈니스 계층에 대해 가능한 한 적은 것을 알아야합니다. MVP 또는 MVC의 경우,이 추가 분리를 통해 프론트 엔드와 백엔드를 분리하여 달성하기가 매우 쉽습니다!

다른 팁

프레젠테이션 계층에서 엔티티 객체를 사용 및 소비 할 수 있도록하는 것이 절대적으로 바람직합니다. 그것이 모든 일이 그랬던 것입니다.

  • 객체의 바인딩 객체 모음 그리드/목록 뷰/드롭 다운
  • 단일 객체 (예 : 고객)를 읽기/업데이트/삭제 양식에 뿌려

이것은 당신의 삶을 훨씬 쉽게 만듭니다. 그렇지 않으면 프리젠 테이션과 비즈니스 계층 사이의 문자열 후 int 후 int 후 문자열을 통과해야합니다.

이들은 엔티티 객체 또는 엔티티 객체에서 수화 된 자신의 POCO 객체 일 수 있습니다.

나는 심지어 당신의 앙트들이 자신의 집회에 달과 분리되어야한다고 말할 것입니다.

나는 그렇게하는 것이 가장 좋은 방법은 데이터 클래스를 동작과 분리하고 프레젠테이션 수준에서 데이터 클래스 만 참조하는 것입니다. WCF를 사용하는 좋은 접근 방식은 이것을 참조하십시오. 링크

보다 컨트롤러 감독 그리고 수동적 견해

엔티티를 통과하면 본질적으로 컨트롤러를 감독하는 것입니다. 그렇지 않으면 당신은 수동적 인 견해입니다.

컨트롤러를 감독하는 것은 작업이 적지 만 테스트 가능성이 떨어집니다. 감독 컨트롤러는 또한 데이터베인딩이 정상이라고 말합니다. 수동적 견해는 테스트 가능하지만 훨씬 더 많은 작업입니다. 데이터베인딩이 없습니다. 많은 속성.

일반적으로 감독 컨트롤러를 고수합니다. 당신은 일반적으로 그 수준의 테스트 가능성이 필요하지 않으며 추가 문제가되지 않습니다.

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