gpt4 book ai didi

c# - 用非静态类包装静态类

转载 作者:太空狗 更新时间:2023-10-30 01:04:57 25 4
gpt4 key购买 nike

我正在看一个项目,我发现了一些非常奇怪的东西。

有一个具有一组方法的静态类,其中每个方法调用远程服务器。

模板看起来像这样:

public static class DAI

public static ResponseObject ExecStatement(string db, string sql)
{
{ ... }
}

public static DataSetResponseObject GetDataSet(string db, string sql)
{
{ ... }
}

public static DataTableResponseObject GetDataTable(string db, string sql)
{
{ ... }
}
}

但是项目中没有任何地方调用这个类。相反,它会调用非静态类容器。

public class ExecSP : IExecSP
{
string _db;
public ExecSP(string db)
{
_db = db;
}

public ResponseObject OutputAsResponseObject(string sql)
{
return DAI.ExecStatement(_db, sql);
}

public ResponseObject OutputAsDataSet(string sql)
{
return DAI.GetDataSet(_db, sql);
}

public ResponseObject OutputAsDataTable(string sql)
{
return DAI.GetDataTable(_db, sql);
}
}

现在,我认为仅有的两点优势是,当包裹在非静态容器中时,命名法更加清晰,而且要传递的参数更少。

但我想知道用非静态包装静态类是否是设计上的好主意?如果有的话,还有哪些其他原因?因为我认为创建静态并调用它是可以的。但是这个项目有意将所有静态类包装起来;我不确定为什么。

最佳答案

我过去做过类似事情的最常见原因是静态方法是否由第三方库提供(即我没有编写),但我不想编写代码直接依赖于该库。在那种情况下,我将编写自己的类并让它采用直接依赖关系。

假设我使用一个接口(interface)(或类似于您示例中的接口(interface)),那么如果我决定要使用不同的库,我可以编写另一个实现相同接口(interface)的类并换出具体类在运行时(使用依赖注入(inject)之类的东西)。

关于c# - 用非静态类包装静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848159/

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