gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:10:14 25 4
gpt4 key购买 nike

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

是否有可能以任何方式保留我的构造函数而不需要该引用?

谢尔顿

最佳答案

目前在我的公司,这可能是错误的……但它对我们有用,我们的业务对象从接口(interface)继承到我们的数据对象。我们通常不会从我们的数据对象中组合我们的业务对象;在我看来,这就是您正在做的事情。

编辑:添加了我之前遗漏的接口(interface)。我很抱歉。当你匆忙时,就会发生这种情况。

// 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}
}}

仍然必须包括对接口(interface)的引用,但不再是对实际数据层的引用。当我们需要将业务对象映射到数据对象时,我们会滚动自己的映射或使用 AutoMapper。

关于C#.NET构造函数重载引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com