gpt4 book ai didi

c# - 创建用于创建新 SqlConnection 对象的工厂方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:52 25 4
gpt4 key购买 nike

FOLLOW UP TO MARC GRAVELLS SUGGESTION IN THIS QUESTION

我现在在我的代码中多次重复这样的事情:

using (var conn = CreateConnection())
using (var dataCommand = conn.CreateCommand())
{
conn.Open();
[...]
}

以下对于工厂方法 CreateConnection() 是否正确?还是容易出错? (注意:我只会从 using 指令中调用它)

SqlConnection CreateConnection()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
return conn;
}

或者是否需要修改此方法并在其中加入 Open

最佳答案

您的代码是静态工厂方法的典型例子。

工厂模式是Software Design Patterns的一部分,它们是软件设计中给定上下文中常见问题的一般可重用解决方案。我可以建议你阅读 Head First Design Patterns这是一本了解设计模式的非常好的入门书。

关于您的代码的一些建议:

  1. 将工厂方法设为静态,它不使用任何实例变量等。
  2. 不相关但是,你不需要在你的工厂方法中使用局部变量,你可以直接返回连接。

现在你的方法看起来像这样:

static SqlConnection CreateConnection(){
return new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
}

您可能想在调用 SqlConnection 的构造函数之前检查 ConnectionStrings["IMS"] 是否为空。此类中不需要进一步的错误处理,因为它不会启动连接。

假设您想返回一个打开的连接并用相同的方法处理连接错误:

static SqlConnection CreateConnection()
{

if (ConfigurationManager.ConnectionStrings["IMS"] == null)
{
throw new Exception("Connection string not found in the configuration file.");
}
var sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
try
{
sqlConnection.Open();
}
catch (Exception exception)
{
throw new Exception("An error occured while connecting to the database. See innerException for details.", exception);
}
return sqlConnection;
}

如果需要,您可以创建自己的异常类以在以后处理这些异常。参见 ASP MVC N-Tier Exception handling .如果发生异常,您也可以返回 null,但首先检查“Is returning null bad design?”。

关于c# - 创建用于创建新 SqlConnection 对象的工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687951/

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