문제

N-Tier 응용 프로그램의 데이터를 레이어로 어떻게 전달합니까? 나는 3 가지 다른 방법을 매핑했다.

ㅏ)일반 .NET 객체 일반 데이터 테이블, 해시블, 일반 데이터 세트, 문자열, int 등 ... 데이터 세트를 사용하여 UI 계층으로 전송되는 비즈니스 객체를 채우십시오.

Alt Text http://img11.imageshack.us/img11/460/generic.png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

찬성- 추가 레이어가 필요하지 않습니다범죄자- 비즈니스 계층의 일반 데이터 세트 및 테이블로 작업해야합니다.

비)다른 레이어가 참조하는 엔티티 계층을 사용합니다. 이 레이어에는 강력하게 입력 된 데이터 세트 또는 일반 기존 C 객체가 포함됩니다. 객체는 대부분 컨테이너 데이터와 논리가 거의 없습니다. 이들은 UI 계층으로 전송 된 것과 동일한 개체입니다.

대체 텍스트 http://img8.imageshack.us/img8/6454/entities.png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

찬성- 모든 레이어에서 동일한 클래스로 작업합니다범죄자- 모든 레이어에 Entities.dll에 대한 참조를 추가합니다

씨)DataAccess 레이어에 정의 된 데이터 전송 개체 (Conatiner 개체 만 해당)를 사용하십시오. 그런 다음 해당 객체를 사용하여 UI 계층으로 전송되는 비즈니스 객체를 채우십시오.

Alt Text http://img43.imageshack.us/img43/1236/transferp.png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

찬성- 비즈니스 계층은 일반 클래스에서 작동 할 필요가 없습니다.범죄자- 두 가지 유형의 객체로 작업하면 전송 개체로 비즈니스 객체를 수화시켜야합니다.

우리는 직장에서 토론을했고 지역 사회가 어떻게 생각하는지보고 싶었습니다. 또한 Dabbleboard에 링크를 추가했습니다. 편집 대신 복사하여 작성하십시오.
감사

도움이 되었습니까?

해결책

사용하는 경우 계층화 접근법, 모든 레이어가 동일한 프로세스 공간에서 (본질적으로) 실행되므로 마샬링/직렬화가 없으므로 접근 B와 함께 갈 것입니다. 그것에.

그러나 당신은 당신이 a를 사용하고 있다면 계층 제목이 제안한대로 접근 방식은 교차 된 프로세스 및/또는 네트워크 경계가 있음을 의미합니다. 접근 C와 함께 갈 것을 제안합니다. 실제로 인스턴스를 전달하지 않으므로 사본을 전달하므로 얻을 수있는 이점이 있습니다. MVC 접근법에 대한 관찰 가능한 옵션과 같은 동일한 객체와의 결합은 어쨌든 손실됩니다. 동일한 클래스를 모두 사용하는 것보다 모든 계층 수준에서 데이터 API를 정의하는 것이 좋습니다.

다른 팁

위대한 질문 - 항상 그렇듯이 대답은 "의존적"이어야합니다.

응용 프로그램 유형과 전송 객체 (즉, 데이터베이스 엔터티에 더 해당하는 멍청한 비즈니스 객체)와 달리 비즈니스 개체 (ENTIS)가 필요한지 여부.

전통적으로, 나는 당신이 항상 성능의 이유로 인해 항상 일반 데이터 세트 (또는 데이터 테이블)가 필요하다고 주장했을 것입니다. 더 큰 세트를 사용, 표시 또는 조작해야 할 때마다 많은 비즈니스 객체를 인스턴스화하는 전통적인 엄격한 OO 방식이 실패했습니다.

그러나 LINQ에서 SQL과 함께 일하기 시작한 이래로 패러다임이 바뀌 었습니다. LINQ 모델이 비즈니스 객체, 전송 객체 및 일반 데이터 세트 등 모든 것이 될 수 있기 때문에 더 이상이를 필요로하지 않습니다. 나는 이것이 실제로 큰 응용 프로그램에서 얼마나 잘 작동하는지, 그리고 LINQ 모델에서 프론트 엔드 코드를 분리 해야하는지 여부를 아직 탐색하지 않았습니다. 나는 실제로 어느 쪽이든 답을 찾지 않고 동료들과 그것에 대해 토론했습니다.

나는 옵션 C를 좋아하지만 두 가지 이유로 일시 중지를 준다.

  1. 나는 너무 많은 곳에있는 적절한 사람들이 무엇인지에 대한 knwowledge를 전파해야합니다.
  2. DTO는 직렬화 가능해야하며, 이는 끔찍하지는 않지만 여전히 고려 사항입니다.

3 개의 레이어가 모두 같은 앱 내에 존재한다고 가정합니다. Java Atlest에서는 데이터 액세스를 위해 최대 절전 모드를 사용했으며 모든 계층에서 해당 데이터 빈을 사용했습니다. (옵션 b) 레이어에서 엔티티를 재사용 할 수 있어야합니다.

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