2009-11-04 2 views
3

DataLayer에 모든 데이터 액세스 항목이있는 특정 클래스가있는 계층화 된 응용 프로그램을 고려하면 비즈니스 계층에는 생성자에서 데이터 개체를 가져올 수있는 클래스가 있고 다른 과부하도 있습니다. 예 :C# .NET 생성자 오버로드 참조 문제

namespace Datalayer 
{ 
    public class dataObject 
    { 
     // all the class here 
    } 
} 

namespace BusinessLayer 
{ 
    public class busObject 
    { 
     busObject(){} 
     busObject(Datalayer.dataObject parm) {/*do something with parm*/} 
     busObject(int objectID) {/*go get the dataObject with the ID*/} 
    } 
} 

위의 레이어 (UI 레이어 일 가능성이 있음)는이 모델의 데이터 레이어에 대한 참조가 필요하지 않습니다. 그러나 이러한 방식으로 비즈니스 계층에 ctors를 설정해야합니다. 왜 누군가가 설명 할 수 있습니까?

나는이 방법을 선호하지만, UI 레이어에서 데이터 계층 참조를 원하지 않습니다. 지금까지 그것을 해결하기 위해 나는 지난 ctor에 있음을 제거하고 인스턴스화 한 후 객체 설정하는 등의 방법 추가 한 :

Select(int objectID) {/*go get the dataObject with the ID*/} 

가 어떤 식 으로든 그 참조를 필요로하지 않고 위와 같이 내 생성자를 그대로 둘 수도를?

셀던

답변

1

현재 내 회사에서 이것이 틀린 방식 일 수 있습니다 ...하지만 우리를 위해 작동합니다. 비즈니스 개체는 인터페이스에서 데이터 개체를 상속받습니다. 우리는 일반적으로 데이터 객체로부터 비즈니스 객체를 작성하지 않습니다. 네가하는 것처럼 내게 보이는거야.

편집 : 이전에 빠뜨린 인터페이스가 추가되었습니다. 내 사과. 서두를 때 일어나는 일입니다.

인터페이스에 대한 참조가 포함되어야하지만 더 이상 실제 데이터 계층에 대한 참조는 포함되지 않아야합니다. 비즈니스 오브젝트를 데이터 오브젝트에 맵핑해야 할 때 우리는 자체 맵핑을 롤하거나 AutoMapper를 사용합니다.

+0

실제로 비즈니스 계층에서 데이터 계층을 상속하는 경우 동일한 문제가 발생합니다. 'DataLayer.dataObject'형식이 참조되지 않은 어셈블리에 정의되어 있습니다. 'DataLayer, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'어셈블리에 대한 참조를 추가해야합니다. 탑 레이어에게 데이터 플레이어에 대한 참조가 없습니까? –

+0

@ sheheldon- 지금 너를 따라갈거야. 네가 묻고있는 부분을 잘못 이해했다. 이제 코드를 살펴 보았습니다. 데이터 레이어 객체에 대한 인터페이스를 사용하고 있습니다. 에피카가 제안한 것과 비슷합니다. 그런 다음 해당 인터페이스를 자체 dll에 넣습니다 (예 : 네임 스페이스 DataLayer.Interfaces.dll). 내 대답을 적절하게 편집하겠습니다. –

0

은 데이터 영역에 대한 인터페이스를 정의하고 사용 DI 컨테이너 또는 사용 제공 패턴 중 하나는 데이터 영역의 구체적인 인스턴스를 얻을 수 있습니다.