Sis*_*utl 5 c# constructor sqldatareader
我正在维护一些C#2.0代码,程序员通过打开DataReader然后将其传递给对象的构造函数来使用读取业务对象集合的模式.我看不出任何明显的错误,但对我来说感觉很糟糕.这样可以吗?
private static void GetObjects()
{
List<MyObject> objects = new List<MyObject>();
string sql = "Select ...";
SqlConnection connection = GetConnection();
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
objects.Add(new MyObject(reader));
reader.Close();
}
public MyObject(SqlDataReader reader)
{
field0 = reader.GetString(0);
field1 = reader.GetString(1);
field2 = reader.GetString(2);
}
Run Code Online (Sandbox Code Playgroud)
通过将DataReader传递给对象的构造函数,您可以在业务对象和您选择的持久性技术之间建立非常紧密的耦合.
至少,这种紧密耦合将使重用和测试变得困难; 在最坏的情况下,它可能导致业务对象对数据库了解太多.
解决这个问题并不太困难 - 您只需将对象初始化移出构造函数并进入不同的工厂类.
| 归档时间: |
|
| 查看次数: |
2435 次 |
| 最近记录: |