2010-12-19 5 views
12

사람들, 여기에 또 다른 하나가 있습니다.N-Tier 응용 프로그램에 대한 초보자를위한 조언

저는 n 계층 응용 프로그램 세계에서 시작하고 있습니다. 주제에 대한 독서를 한 적이 있는데 일반적인 조언은 n 계층 응용 프로그램의 목적이 기능 트윈 레이어를 추상화하는 것입니다. 그래서,이 기반으로하는 N 계층 응용 프로그램에서 정규 모델이다 : 나는 .NET 개발자를 해요 때문에

Data Access -> Business Layer -> Presentation

, 나는 그 여러 클라이언트 유형 (실버, 웹 애플리케이션과의 통합을 향상시키기 위해 생각 또는 WinForms 클라이언트) WCF (Windows Communication Foundation)를 비즈니스 계층에서 데이터 서비스로 사용하여 클라이언트가 유형에 관계없이 통신 할 수 있도록해야합니다. 또한, 나는 ORM으로서의 NHibernate의 거대한 팬이다. 그래서 내 구조는 다음과 같이 진행됩니다

Data Access (NHibernate) -> Business Layer (WCF) -> Presentation (WPF, ASP.NET, WinForms

좋아,이 설정하므로. 나는 이런 종류의 접근법에서 완전히 초보자 다. 그래서 나는이 설정에 대한 조언을 구하기 위해 여기에 게시 할 수 있다고 생각했다. 또한 VS 솔루션에서이를 설정하는 방법에 대해 매우 혼란 스럽습니다. 다른 프로젝트에서 레이어를 분리하는 것을 좋아하지만 데이터 오브젝트 (예 : 고객, 주문 등)의 추상화는 어떻습니까? 나는 그들을 별도의 도서관에 넣었습니까? 그리고 WCF는 어떻습니까? 필자는 데이터 클래스를 유선을 통해 클라이언트로 전송하는 프로그래머의 죄를 알고 있습니다. 이것을 달성하는 전문가의 방법은 무엇입니까?

감사합니다. 어떤 조언을 주시면 감사하겠습니다.

+0

일 - 점에 문제를 가져 오는 좋은 질문입니다. 그것은 약간 주관적일지도 모른다. – Lucero

+0

http://stackoverflow.com/questions/1650887/mixing-nhibernate-with-3-tier-developing – Lucero

+0

Lucero, 답장을 보내 주셔서 감사합니다. 나는 이미 질문을 점검하고, 나의 의심을 해결하지만, 불행하게도 나는 그의 접근 방식을별로 좋아하지 않는다. 모두 NHibernate 엔티티 객체를 WCF에 직접 노출하는 것에 반대하는 것으로 보이며 포스터는 실제로 중재자 서비스 클래스를 사용하는 대신 NHibernate에 WCF 서비스를 연결합니다. 가능한 한 추상화와 통합을 제공하기를 고대하고 있습니다. –

답변

14

목표가 거의 같습니다. N-Tier는 N-Layer보다 조금 복잡하지만 "실제로 레이어가 실제 물리적 서버에 존재합니까?"라고 묻는 것으로 대조 할 수 있습니다.

비즈니스 계층의 복잡성에 따라 비즈니스 계층과 서비스 계층 사이에서 더 추상화 할 수 있습니다. 일반적으로이 둘은 매우 밀접하게 연결되어 있으며 동일한 물리적 서버에 있습니다. 서비스 계층은 종종 BLL의 Facade로 작동합니다.

프레젠테이션 레이어가 ASP.NET 또는 WinForms와 동일한 서버에있는 경우 앱에서 WCF 서비스를 거치지 않고 BLL과 통신하려고 할 수 있습니다.

Microsoft Patterns & Practices - Application Architecture Guide에서 읽으십시오.

도메인 개체는 일반적으로 자신의 도메인 모델에 있어야합니다. Microsoft Framework Design Guidelines에 따르면, 이에 따라 프로젝트 어셈블리 이름을하는 것이 좋습니다입니다 :..

[회사] [ProductOrComponent] [...]

나는 일반적으로 이름 간격이 형식을 좋아하는 일 및

사용 :

.... alt text

I :

[회사 소개] [제품] [계층] [서브 계층은] [...] 여기

각 프로젝트를 구성 할 솔루션 폴더를 사용하는 예제 솔루션 이 예에서는 BLL과 서비스 계층이 있습니다. 프레젠테이션에 실제로 서비스를 호스팅 할 WCF 웹 응용 프로그램이 포함되어있는 동안 서비스 계층은 WCF 라이브러리에서 실제 구현을 제공합니다. 구현을 인터페이스와 분리하는 것은 항상 좋은 습관입니다.

/Client 폴더는 무시할 수 있습니다. 테스트 용 샘플 콘솔 앱으로 사용합니다.서비스를 사용하는 모든 클라이언트 응용 프로그램에는 자체 솔루션이 있어야하거나 거대한 솔루션을 관리해야합니다.

데이터 객체가 유선을 통해 전송되는 경우 ... ORM의 클래스를 의미한다고 가정합니다. (도메인 모델) 당신은 일반적으로 나쁜 습관으로 간주됩니다. 이 솔루션은 데이터 전송 객체를 사용합니다. 그림에서 .Dto 라이브러리를 볼 수 있습니다. 그러나 AutoMapper와 같은 도구를 사용할 수 있다면, 필자가 원하는 것보다 DTO를 솔루션에 추가하면 더 복잡하고 유지 관리가됩니다. 나는 Dino Esposito가이 주제에 대해 좋은 기사를 썼다고 믿는다. 그것을 찾으려고 노력할 것입니다.

희망이 도움이됩니다.


[편집]

내가 nHibernate 수의 기능에 익숙 해요,주의해야한다. 해당 ORM을 사용하는 더 좋은 해결책이있을 수 있습니다. 필자는 Entity Framework에서만 작업했습니다.


[수정 2]

체크 아웃 디노 에스 포의 - The Pros and Cons of Data Transfer Objects

+0

좋아요, 당신의 대답은 매우 간단하고 제가 가진 모든 의심을 거의 해결해줍니다. VS 솔루션 구성표와 참고 자료를 보내 주셔서 감사합니다. 나는 지금 App Architecture 책의 하드 카피를 사려고 강력하게 생각하고있다. –

+0

확실히 좋은 구매. 언급 된 두 권의 책을 직접 인쇄했습니다. 훌륭한 읽기 및 참조 자료. – Daniel

관련 문제