如何讓資料訪問過程更透明.

來源:互聯網
上載者:User

    在編寫資料庫操作方法時我們經常考慮方法內部處理的Connection, Transaction等,主要方便以後不同方法進行整合擴充。但很多時候寫資料庫操作方法都是封閉,在方法內部開啟Connection或Transaction處理;這樣即滿足現有需求的需要,要省下了調用方法所帶來的麻煩事(因為在調用方法裡必須定義Connection等資訊傳進去)。雖然這樣滿足了現有的需求,但面對以後在功能擴充需要整合幾個方法時問題就產生了,因為方法是封閉的當你需多個方法同時使用一個Connection或Transaction就必須修改原有方法;雖然可以對方法重載一個新版來適應新的需要,但是代碼的修改和重構也不是一件輕鬆的工作。

    簡單地描述一下問題:

    public void a()

    {

              ........

}

public void b()

{

       …….

}

以上兩個方法單獨使用並沒有什麼問題,因為它們都是獨立的。當出現下面情況又是如何呢?

Public void c()

{

a();

b();

….

}

在執行這個方法時有可能要保證a和b裡面的資料庫訪問必須使用同一個Connection,如果需要資料完全整性還要確保兩個方法的資料操作都必須使用同一個Transaction。由於剛開始編寫a和b方法沒有考慮這些情況,這個時候我們能做的只有把a和b方法進行重構來滿足原有和現在的需要。

如果我們不修改a和b就能滿足c的需要那是件多麼好的事情,這樣開發人員就有更多的時間去處理業務相關的麻煩事情。有時想一下dotNET提供一個DataContext(資料庫操作內容物件)該多好啊,在編寫資料庫作業碼時不用關心使用什麼的Connection和Transaction;通過當前的DataContext來確定。雖然自己有這樣的想法去實現,不過dotNET能提供是件最好不過的事情。

Public void c()

{

    using(DataContext context = new DataContext())

{

a();

b();

….

}

}

 

Public void D()

{

using(DataContext context = new DataContext())

{

c();

….

}

     }

補充一下:
其實在我的想法中DataContext不一定要顯式建立,可以通過配置的方式在中程式設定一個預設的DataContext。
以下代碼的功能沒有完全實現。
  Table orders = new Table("Orders");
    Table orderdetails = new Table("[Order Details]");
    orderdetails.Delete(OrderDetails._OrderID == 10500);
    orders.Delete(Orders._OrderID == 10500);
即使不用顯式建立DataContext 上面代碼也可以運行。
為了保證資料完整性可以這樣做:
using(TransactionContext tran = new TransactionContext())
{
    Table orders = new Table("Orders");
    Table orderdetails = new Table("[Order Details]");
    orderdetails.Delete(OrderDetails._OrderID == 10500);
    orders.Delete(Orders._OrderID == 10500);
    tran.Commit();

在寫代碼的過程就可以把這些東西拋開,需要時候定義相應的DataContext就可以了。

如果需要高度透明性,只有一個DataContext是遠遠不夠的,必須提供相應資料操作的封裝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.