2012-04-03 1 views
0

저는 VS2010의 솔루션을 여러 프로젝트와 함께 가지고 있습니다. 각 프로젝트는 내 응용 프로그램 내에서 레이어를 구성합니다. 현재 메소드가없는 객체 인 비즈니스 엔티티가 있으며 프로젝트의 비즈니스 엔티티 레이어를 참조하는 관리 레이어가 있습니다. 이제는 내 응용 프로그램을 제대로 디자인하지 않은 것으로 생각하고 다른 계층에있는 도우미 클래스의 메서드를 비즈니스 엔터티 자체에서 만드는 메서드로 이동하려고합니다.메소드에서 관리 계층을 사용하도록 비즈니스 오브젝트 계층을 얻으려면 어떻게해야합니까?

예를 들어 도우미 클래스를 사용하여 관리 레이어에 요청을 전달하는 Reboot() 메서드를 호출하는 VirtualMachine 개체가 있습니다. 정적 관리자 클래스는 VM을 재부팅하는 API와 통신합니다. 나는 가상 머신 객체로 재부팅() 메소드를 이동하려면,하지만 난 관리 계층 참조해야합니다 : 내 기관 프로젝트 내 관리 프로젝트에 대한 참조를 추가한다면

public void Reboot() 
{ 
    VMManager.Reboot(this.Name); 
} 

을, 나는 원형을 얻을 종속성 오류입니다. 이것이 어떻게되어야하는지입니다. 이 상황을 어떻게 해결할 수 있습니까? 엔티티 계층과 관리 계층 사이에 또 ​​다른 계층이 필요합니까? 아니면 그냥 잊어 버리고 그대로 두어야합니까?

응용 프로그램이 정상적으로 작동하지만 내 디자인이 특히 OOP 중심이 아니므로이 문제를 해결하고 싶습니다.

답변

1

당신은, 당신은 순환 참조를해서는 안, 또 다른 레이어를 만드는 것은 바로 올바른 도움이 될 수있다 : 나는 당신의 프로젝트에서 볼 수있는 것과

, 당신은 도우미 클래스의 서비스를 사용하는 비즈니스 계층이 필요합니다 순환 참조 오류는 피할 수 있지만 올바르게 이해할 수 있으면 순환 참조가됩니다.

나는 앉아서지도를 그리며 메서드는 레이어 만 호출해야합니다. 이것이 프로그램의 "가장 밑"에있는 가장 일반적인 방법이며, 더 전문화하면 계층 구조에서 상위에 올려야합니다.

만들고있는 프로그램의 API는이 계층 구조의 맨 아래에 있어야합니다.

전체 프로젝트를 다시 디자인 할 필요가 없습니다. 그러나 구조를 시각화하는 데 도움을 줄 수있는 것 같습니다.

0

경영층 (업무를 수행하는 사람인 것처럼)은 비즈니스 계층의 상단에 맞지 않는 것처럼 보입니다. 실제로 비즈니스 계층 위에는 위와 같은 레이어가 없습니다. 비즈니스 레이어 상단에 외관 레이어 만 있습니다. 이는 필요한 것과 다릅니다.

// Business layer 
public class VirtualMachineManager 
{ 
    IRebooter _rebooter; 
    public class(IRebooter rebooter) 
    { 
     _rebooter = rebooter; 
    } 
} 

// helper class 
public class Rebooter : IRebooter 
{ 
    .... 
}