如何让我的业务对象层在其方法中使用管理层?

时间:2012-04-03 11:25:01

标签: c# .net oop design-patterns circular-dependency

我在VS2010中有一个包含多个项目的解决方案,每个项目都在我的应用程序中构成一个层。我有业务实体,它们当前是没有方法的对象,我有一个管理层,它引用了它的项目中的业务实体层。我现在认为我设计的应用程序很差,并且希望将辅助类(在另一层中)的方法移动到我将在业务实体本身中创建的方法中。

例如,我有一个VirtualMachine对象,它使用一个帮助器类来调用Reboot()方法,该方法将请求传递给管理层。静态管理器类与重新启动VM的API进行通信。我想将Reboot()方法移动到VirtualMachine对象中,但我需要引用管理层:

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

因此,如果我在我的实体项目中添加对我的管理项目的引用,我会得到循环依赖性错误,它应该是这样的。我该如何排除这种情况?我是否需要实体层和管理层之间的另一层?或者,我应该忘记它并保持原样。

该应用程序现在运行正常,但我担心我的设计不是特别以OOP为中心,我想纠正这个。

2 个答案:

答案 0 :(得分:1)

你是对的,你不应该进行循环引用,使另一层可能只是帮助你避免循环引用错误,但如果我理解正确的话,它仍然是一个循环引用。

我会坐下来画一张地图,方法只能分层调用。这是程序“底层”最常用的方法,你应该把它放在层次结构中越高的专业化。

您正在制作的程序的API应位于此层次结构的底部。

您可能不需要重新设计整个项目。但听起来你可以通过可视化结构来帮助自己。

答案 1 :(得分:0)

管理层(因为它正在进行工作)似乎不适合业务层的顶部。实际上,我们在业务层之上没有这样的层,我们在业务层的顶部只有外观层 - 这与您需要的不一样。

从我在项目中看到的内容,您需要业务层来使用帮助程序类的服务:

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

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