2011-07-28 10 views
0

.Net에서 N 계층 아키텍처를 구현하고 있으며, Entity 레이어, DAL 레이어, 비즈니스 레이어 및 UI 레이어로 구성되어 있습니다..Net - Cross Referencing 레이어의 N 계층 아키텍처 프로젝트 구조

기본 필드 외에도 엔티티에는 탐색 속성이 있습니다. 예를 들어 Invoice 엔터티가있을 것입니다. InvoiceLines 속성은 부모 Invoice 엔터티와 연결된 모든 InvoiceLine 엔터티를 반환해야합니다.

일단 InvoiceLines에 영구적 인 매체에서 검색된 코드를 복제하고 싶지 않은 비즈니스 논리가 있기 때문에 Invoice 엔터티의 InvoiceLines 속성은 호출을 통해 자체 채워집니다 IEnumerable을 반환하는 비즈니스 논리 내의 GetInvoiceLinesByInvoiceID 메서드에 전달합니다.

내 문제는 이것입니다. 엔티티 프로젝트가 비즈니스 프로젝트에 의존하고 비즈니스 프로젝트가 엔티티 프로젝트에 종속되어 상호 참조를 도입하므로 레이어를 별도의 프로젝트로 분리 할 수 ​​없습니다. 현재 3 개의 레이어 (엔티티, DAL 및 비즈니스)가 모두 동일한 프로젝트에 있으므로 제대로 작동하지만 다른 솔루션 중에서 엔티티 만 공유 할 수는 없습니다.

이 방법으로 레이어를 상호 참조하면 일부 원칙을 위반하는 것으로 알고 있지만 비즈니스 로직이 적용된 내 엔터티에 탐색 속성이 채워지는 것이 매우 편리합니다.

아무도 나에게 별도의 프로젝트에 내 레이어를 유지하면서 더 나은 접근 방식을 제안하거나이 방법을 사용할 수 있습니까?

건배

+0

명확성을 위해 엔티티 계층을 SQLCLR 프로젝트와 공유해야합니다. 엔티티, DAL 및 비즈니스를 포함하는 전체 "레이어"프로젝트에는 SQLCLR에서 지원하지 않는 참조 된 어셈블리가 포함되어 있으므로 전체 어셈블리. – Hoodlum

답변

2

나는이 상황을 자신 번에 봤는데 밖으로 간단한 방법은 일반적으로있다.

여기에 몇 가지 가정을 할 것이지만 잘하면 그들이 옳을 것입니다. 인터페이스 기반 접근 방식을 사용하는 경우 비즈니스 로직은 일부 인터페이스를 구현하고 엔티티는 일부 인터페이스를 구현합니다. 엔티티에서 비즈니스 오브젝트까지의 종속성은 비즈니스 오브젝트에서 엔티티로의 인터페이스의 경우에만 적용되어야합니다. 이렇게하면 인터페이스를 별도의 프로젝트 (또는 두 개)로 분리 한 다음 비즈니스 로직과 구체적인 엔티티를 자체 프로젝트로 분리하여 인터페이스 어셈블리 만 참조하면됩니다. 의미가

희망.

+0

좋은 예를 보려면 SharpArchitecture 프로젝트 www.sharparchitecture.net –

+0

을 참조하십시오. 내 현재 프로젝트 아키텍처를 설명하고 있기 때문에 ... '내 말이 맞다. : D – Jonathan

+0

내가 무슨 뜻인지 알 겠어 - 필드를 정의하면 내 엔티티를 인터페이스로 사용하고 실제 엔티티가이 인터페이스를 구현하게하고 비즈니스 레이어가 동일한 인터페이스를 구현하는 객체를 반환하도록하면 분리 될 수 있습니다. – Hoodlum

관련 문제