2012-04-03 59 views
0

我在VS2010中有几个项目的解决方案,每个项目都在我的应用程序中组成一个图层。我有业务实体,它们是当前没有方法的对象,并且我有一个管理层,它引用其项目中的业务实体层。我现在认为我已经设计好了我的应用程序,并且希望将辅助类(位于另一层)中的方法移动到我将在业务实体中创建的方法中。如何让我的业务对象层在其方法中使用管理层?

例如,我有一个VirtualMachine对象,它使用助手类来调用它的Reboot()方法,该方法将请求传递给管理层。静态管理器类与重新启动虚拟机的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 
{ 
    .... 
}