C# - 如何编写需要数据库连接的对象

时间:2011-12-14 15:58:46

标签: c# object

我是C#(winforms)创建对象的新手,需要知道最好的方法。我有一个简单的对象,它将从我们的数据库中返回一些数据。通常情况下,我会将DS字符串(已编码)放入对象中并完成,但我发现的问题是,这并不能使对象真正“移动”以便能够在我们的任何应用程序中使用(网或窗口)。那么,最好是在构造函数中创建一个需要编码的db字符串的对象,或者我应该怎么做呢?

这就是我的想法:

public class foo
{
    public foo(string EncodedConnectionString)
    {
        _EncodedConnectionString = EncodedConnectionString;
    }

    private string _EncodedConnectionString { get; set; }

    private DataSet GetFooFromDB()
    {
        oDatabase = new SQLDataBase(
            EncodedConnectionString, 15);

        //remaining code omitted...
    }
}

思考,评论?

2 个答案:

答案 0 :(得分:2)

我在代码中改变的是:

public class foo
{
    private SQLDataBase _sqlDataBase;
    public foo(SQLDataBase sqlDataBase)
    {
        _sqlDataBase = sqlDataBase;
    }
}

现在,您可以使用依赖注入来测试代码。连接字符串是外部添加的,因此您可以更改数据库而无需重新编写/重写大量代码。

答案 1 :(得分:2)

实际上,在持久性方面,对象本身应该是不可知的。我的意思是,对象既不应该关心也不应该知道它们是如何被存储/加载的。

有多种方法可以实现持久性。一种方法是使用DAL(数据访问层),它知道如何加载和存储与对象关联的数据。但请记住,即使DAL也没有硬编码的连接字符串,而是应该根据需要从配置文件中提取它。

这里有一个简单的例子:http://www.radsoftware.com.au/articles/dataaccesslayerdesign1.aspx就个人而言,我不同意有关如何完成的所有内容,但这是了解它们的一个很好的起点。

有关更高级的阅读,请查看实体框架http://msdn.microsoft.com/en-us/library/bb399572.aspx

另一种方法是使用Inversion of Control和Dependency Injection。我们的想法是,您的对象将具有Save()Load()方法,这些方法接受执行实际持久性的某种类型的接口。 http://msdn.microsoft.com/en-us/library/aa973811.aspx

这样做有点复杂,但需要支付股息,并可根据需要灵活地更换存储库。这意味着支持多个数据库后端甚至将对象存储在csv / xml文件中要简单得多。