考虑一个分层应用程序,其中DataLayer具有某个类,其中包含所有数据访问内容,并且上面的业务层有一个类,它可以在构造函数中接收数据对象,并且还具有其他重载。例如:
namespace Datalayer
{
public class dataObject
{
// all the class here
}
}
namespace BusinessLayer
{
public class busObject
{
busObject(){}
busObject(Datalayer.dataObject parm) {/*do something with parm*/}
busObject(int objectID) {/*go get the dataObject with the ID*/}
}
}
上面的图层(可能是UI图层)不需要在此模型中引用数据层。但是,通过这种方式在业务层中设置ctors是必需的。有人可以解释原因吗?
我更喜欢以这种方式使用我的ctors,但不希望UI层中的数据层引用。为了解决它迄今为止我删除了最后一个ctor并添加了一个方法,以便在实例化后设置对象:
Select(int objectID) {/*go get the dataObject with the ID*/}
是否可以以任何方式离开我的构造函数而不需要引用?
谢尔顿
答案 0 :(得分:1)
目前在我的公司,这可能是错误的...但它适用于我们,我们的业务对象从我们的数据对象的接口继承。我们通常不会从数据对象中编写业务对象;就像你在做什么一样。
修改:添加了我之前遗漏的界面。我很抱歉。这就是你匆忙时会发生的事情。
// in it's own dll: Datalayer.Interfaces.dll
namespace Datalayer.Interfaces{
public interface IdataObject
{ // interface declaration }
namespace Datalayer {
public class dataObject: IdataObject
{// all the class here } }
namespace BusinessLayer {
public class busObject : IdataObject {
busObject(){}
busObject(IdataObject dataObject) {}
busObject(int objectID) {//go get the dataObject with the ID}
}}
必须仍然包含对接口的引用,但不再包含对实际数据层的引用。当我们需要将业务对象映射到数据对象时,我们然后滚动我们自己的映射或使用AutoMapper。
答案 1 :(得分:0)
定义DataLayer的接口,并使用DI容器或使用provider pattern来获取DataLayer的具体实例。