簡體   English   中英

C# - 如何編寫需要數據庫連接的對象

[英]C# - How to write an object that requires a DB connection

我是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...
    }
}

想法,評論?

我在你的代碼中改變的是:

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

現在,您可以使用依賴注入來測試代碼。 連接字符串是外部添加的,因此您可以更改數據庫而無需重新編寫/重寫大量代碼。

實際上,在持久性方面,對象本身應該是不可知的。 我的意思是,對象既不應該關心,也不應該知道它們是如何被存儲/加載的。

有多種方法可以實現持久性。 一種方法是使用DAL(數據訪問層),它知道如何加載和存儲與對象關聯的數據。 但請記住,即使是DAL也不會對連接字符串進行硬編碼,而是應該根據需要將其從配置文件中提取出來。

這里有一個簡單的例子: http//www.radsoftware.com.au/articles/dataaccesslayerdesign1.aspx就個人而言,我不同意這方面的一切,但這是了解它們的一個很好的起點。

有關更高級的閱讀,請查看實體框架http://msdn.microsoft.com/en-us/library/bb399572.aspx

另一種方法是使用控制反轉和依賴注入。 我們的想法是你的對象將擁有Save()Load()方法,這些方法接受了執行實際持久性的某種類型的接口。 http://msdn.microsoft.com/en-us/library/aa973811.aspx

這樣做有點復雜,但需要支付股息,並可根據需要靈活地更換存儲庫。 這意味着支持多個數據庫后端甚至將對象存儲在csv / xml文件中要簡單得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM