gpt4 book ai didi

c# - 可以将 DataReader 传递给构造函数吗?

转载 作者:太空狗 更新时间:2023-10-29 22:21:09 24 4
gpt4 key购买 nike

我正在维护一些 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);
}

最佳答案

通过将 DataReader 传递给对象的构造函数,您可以在业务对象和您选择的持久性技术之间建立非常紧密的耦合。

至少,这种紧密耦合会使重用和测试变得困难;在最坏的情况下,它可能导致业务对象对数据库了解得太多。

解决这个问题并不难——您只需将对象初始化从构造函数中移出并移到一个不同的工厂类中即可。

关于c# - 可以将 DataReader 传递给构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885406/

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