C#.NET构造函数重载引用问题

时间:2009-11-04 16:47:02

标签: c# constructor reference

考虑一个分层应用程序,其中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*/}

是否可以以任何方式离开我的构造函数而不需要引用?

谢尔顿

2 个答案:

答案 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的具体实例。