我在VS2010中有一个包含多个项目的解决方案,每个项目都在我的应用程序中构成一个层。我有业务实体,它们当前是没有方法的对象,我有一个管理层,它引用了它的项目中的业务实体层。我现在认为我设计的应用程序很差,并且希望将辅助类(在另一层中)的方法移动到我将在业务实体本身中创建的方法中。
例如,我有一个VirtualMachine对象,它使用一个帮助器类来调用Reboot()方法,该方法将请求传递给管理层。静态管理器类与重新启动VM的API进行通信。我想将Reboot()方法移动到VirtualMachine对象中,但我需要引用管理层:
public void Reboot()
{
VMManager.Reboot(this.Name);
}
因此,如果我在我的实体项目中添加对我的管理项目的引用,我会得到循环依赖性错误,它应该是这样的。我该如何排除这种情况?我是否需要实体层和管理层之间的另一层?或者,我应该忘记它并保持原样。
该应用程序现在运行正常,但我担心我的设计不是特别以OOP为中心,我想纠正这个。
答案 0 :(得分:1)
你是对的,你不应该进行循环引用,使另一层可能只是帮助你避免循环引用错误,但如果我理解正确的话,它仍然是一个循环引用。
我会坐下来画一张地图,方法只能分层调用。这是程序“底层”最常用的方法,你应该把它放在层次结构中越高的专业化。
您正在制作的程序的API应位于此层次结构的底部。
您可能不需要重新设计整个项目。但听起来你可以通过可视化结构来帮助自己。
答案 1 :(得分:0)
管理层(因为它正在进行工作)似乎不适合业务层的顶部。实际上,我们在业务层之上没有这样的层,我们在业务层的顶部只有外观层 - 这与您需要的不一样。
从我在项目中看到的内容,您需要业务层来使用帮助程序类的服务:
// Business layer
public class VirtualMachineManager
{
IRebooter _rebooter;
public class(IRebooter rebooter)
{
_rebooter = rebooter;
}
}
// helper class
public class Rebooter : IRebooter
{
....
}