C# 创建用于创建新SqlConnection对象的工厂方法
我现在在代码中重复了几次类似的内容:C# 创建用于创建新SqlConnection对象的工厂方法,c#,sql-server,C#,Sql Server,我现在在代码中重复了几次类似的内容: using (var conn = CreateConnection()) using (var dataCommand = conn.CreateCommand()) { conn.Open(); [...] } 对于工厂方法CreateConnection(),以下是否正确?还是会容易出错?(注意:我只打算使用指令从调用它) 或者,是否有必要修改此方法并在其中打开呢?您
using (var conn = CreateConnection())
using (var dataCommand = conn.CreateCommand())
{
conn.Open();
[...]
}
对于工厂方法CreateConnection()
,以下是否正确?还是会容易出错?(注意:我只打算使用指令从调用它)
或者,是否有必要修改此方法并在其中打开呢?您的代码就是静态工厂方法的典型示例
工厂模式是的一部分,它是软件设计中给定上下文中常见问题的通用可重用解决方案。我可以建议您阅读这本书,这是理解设计模式的一本非常好的入门书
关于代码的几点建议:
将工厂方法设为静态,它不使用任何实例变量等
不相关,但是,您不需要在工厂方法中使用局部变量,您可以直接返回连接
现在,您的方法如下所示:
static SqlConnection CreateConnection(){
return new SqlConnection(ConfigurationManager.ConnectionStrings["IMS"].ConnectionString);
}
在调用SqlConnection的构造函数之前,您可能需要检查ConnectionString[“IMS”]是否为null。此类中不需要进一步的错误处理,因为它不会启动连接
假设您希望返回打开的连接,并用相同的方法处理连接错误:
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;
}
如果需要,您可以创建自己的异常类,以便稍后处理这些异常。看见如果发生异常,也可以返回null,但请先选中“”。工厂和单例:
我的咆哮。欢迎
在功能上,我看到了开发人员理解工厂模式的方式上的脱节。简而言之
从某种意义上讲,工厂会也应该提供产品。(例如:如果你有一个“汽车工厂”,它应该给你一辆“汽车”)
话虽如此,您只在不希望实例化逻辑被公开时才实现工厂模式
而且需要创造不同的混凝土产品。在你的情况下,如果你需要
始终是SQL对象(一种产品),然后为什么是工厂?
您可以争论可扩展性和可伸缩性,但这是主观的。大多数公司都是这样生活的
SQL server或Oracle已过时,您将不会使用产品中内置的可扩展性
我相信,您可以很好地使用带有静态成员的(或)更简单的类
另一个重要的方法是CloseConnection()方法。
在原始代码中,您使用了using
,它杀死并处置对象,但在新代码中
静态实现,您可能需要构建它李>
您好,您为什么希望避免服务中的冗余代码?我希望避免重复这一行SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings[“IMS”].ConnectionString)
在我的代码中的很多地方,我在我的博客+1中提交了基于模板方法的解决方案以获取帮助:是否可以在此statuc方法中检查ConnectionString[“IMS”]是否为null?这些静态工厂方法还包括哪些与服务器联系的其他方法?例如,您可以返回打开的连接,在这种情况下,您可以检查连接是否已建立(并处理连接错误)您可以在回答中添加一个示例,我会用什么语法来实现这一点?
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;
}
public static void CloseConnection(SQLConnection conn)
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
}
}