![](/img/trans.png)
[英]How can I improve my business layer objects mapping into a database? Is it time for a O/R mapper?
[英]How can I get my business objects layer to use the management layer in their methods?
我在VS2010中有一个解决方案,其中包含多个项目,每个项目都构成了我的应用程序中的一层。 我有目前没有任何方法的对象的业务实体,并且我有一个引用其项目中业务实体层的管理层。 现在,我认为我的应用程序设计不佳,希望将方法从助手类(位于另一层)转移到我将在业务实体内部创建的方法。
例如,我有一个VirtualMachine对象,该对象使用帮助程序类在其上调用Reboot()方法,该方法将请求传递给管理层。 静态管理器类与重新启动VM的API对话。 我想将Reboot()方法移到VirtualMachine对象中,但是我将需要引用管理层:
public void Reboot()
{
VMManager.Reboot(this.Name);
}
因此,如果在我的实体项目中添加对管理项目的引用,则会得到循环依赖项错误,应该是这样。 如何解决这种情况? 我是否需要实体层和管理层之间的另一层? 或者,我应该忘掉它并保持原样。
该应用程序现在可以正常运行,但是我担心我的设计不是特别以OOP为中心,我想对此进行更正。
您是正确的,您不应该进行循环引用,制作另一层可能只是帮助您避免了循环引用错误,但是如果我正确理解您的话,它仍将是循环引用。
我会坐下来,绘制地图,方法只能分层调用。 那是程序“最底层”的最通用方法,您越专业化,您应该将其放在层次结构中的较高位置。
您正在制作的程序的API应该位于此层次结构的底部。
您可能不需要重新设计整个项目。 但是,听起来您可以帮助自己可视化结构。
管理层(因为这是工作的层)似乎不适合业务层的顶部。 实际上,我们在业务层之上没有这样的层,我们仅在业务层的顶部具有外观层 ,这与您所需要的不同。
从您的项目中可以看到,您需要业务层来使用帮助程序类的服务:
// Business layer
public class VirtualMachineManager
{
IRebooter _rebooter;
public class(IRebooter rebooter)
{
_rebooter = rebooter;
}
}
// helper class
public class Rebooter : IRebooter
{
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.