2009-08-27 3 views
1

기본 3 층 디자인을 사용하고 있습니다. 유연성 (및 테스트)을 위해 데이터 레이어를 추상화하고 코드에서 구체적인 클래스를 지정하기를 원했습니다. 그러나, 어떻게 이것을 비즈니스 객체에 전달해야합니까?n-tier 디자인 - 데이터 검색 객체를 전달하는 가장 좋은 방법

abstract class IDataLayer 
{ 
    PersonData GetPerson(int); //PersonData would be a row of data from a table for example 
    JobData[] GetJobs(int); 
    void UpdatePerson(PersonData); 
} 

class ConcreteDataLayerSQL : IDataLayer 
{ 
... 
} 
class ConcreteDataLayerXML : IDataLayer 
{ 
... 
} 

class PersonBAL 
{ 
    void PersonBAL(personId) 
    { 
     //What goes here? 
    } 

    JobBAL[] GetJobs() 
    { 
     //What goes here? 
    } 
} 
class Program 
{ 
    static void Main() 
    { 
     person = new PersonBAL(1); 
    } 
} 

그래서 문제가 어떻게 PersonBAL이 ConcreteDataLayer 사용할 알고 않습니다됩니다 예를 들면 : (의사 코드)입니까? 몇 가지 옵션 중 하나를 생각하고 있습니다.

1 : 구체적인 데이터 레이어를 사람에게 전달합니다. 이것은 데이터 레이어 (새로운 PersonBAL (IDataLayer, int), 새로운 JobBAL (IDataLayer, int) 등)와 상호 작용해야하는 새로운 클래스를 추가하기 시작할 때 고통스러워집니다.

2 : 정적 사용할 데이터 영역을 보유하고있는 객체 (읽기 : 전역 변수)

다른 아이디어?

답변

1

해결하려는 문제는 "종속성 삽입"입니다.

이것이 .NET 코드 (가짜 코드 언어가 C#과 매우 비슷 함)라고 가정하면 이런 종류의 작업을 위해 설계된 Spring.NET과 같은 프레임 워크를 살펴볼 수 있습니다.

+0

용어에 대해 명확히 설명해 주셔서 감사합니다. 문제 해결을위한 프레임 워크를 얻는 것보다 더 나은 솔루션을 원합니다. 프레임 워크가 문제를 어떻게 처리합니까? –

0

나는 각 생성자에서 클래스를 전달하는 것이 당신이 열거 한 이유와 다른 클래스를 사용하기 위해 코드를 변경하는 것이 오류가 발생하기 쉬운 일이기 때문에 어려운 일이라고 생각합니다.

의존성 삽입은 Spring 프레임 워크의 핵심이다. Spring은 XML 구성 파일을 사용하여 클래스 간의 관계를 설명합니다. 유스 케이스의 경우 구성에서 인스턴스화 할 특정 유형을 지정할 수 있으므로 스위치 구현에 한 번만 변경하면된다.

스프링은 잘 알려져 있고 검증 된 프레임 워크이지만 물론 문제를 해결할 필요가 없습니다. 구성 파일에 대한 자신 만의 코드를 작성할 수 있습니다. 어쨌든 이것은 본질적으로 언급 한 두 번째 옵션의 변형입니다. 당신이 직접 PersonBAL를 구성하지 않고 당신이 당신의 PersonBAL 인스턴스를 생성하는 데 사용하는 PersonBALFactory을 가질 수 있도록

0

당신은 당신의 코드에서 간접 레이어를 둘 수 있었다. 팩토리는 생성자를 통해 전달되는 IDataLayer에 대한 의존성을 가지며 (이는 응용 프로그램 시작시에 유선 상태가됩니다) 사용자에게 PersonId를 사용하여 사람을 생성하도록 지시하고 ID를 전달하는 새 PersonBAL을 생성하고 IDataLayer. 이렇게하면 사용자는 어떤 IDataLayer를 사용하고 있는지 걱정할 필요가 없으며 시작시 응용 프로그램 구성에 설정됩니다. 사용자는 알고있는 정보를 사용하여 새 PersonBAL을 요청하기 만합니다.

DI 프레임 워크는 올바른 유형이 생성자로 전달되도록 모든 종속성 삽입을 구성하는 데 도움을 주며 (일단 종속성이있는) 팩토리의 구성을 자동으로 간단하게 만듭니다. 많은 공장이나 복잡한 의존성 그래프.