用三層做視窗登入例項,與曾經做的《機房收費系統》相比,除了引入分層的理念外,最大的改觀就是資料的傳遞由傳參升級成了傳實體,而查詢資料庫的返回結果也有了返回實體與返表的選擇
傳引數與傳實體
視窗登入例項的的UI層是接收使用者操作的最外層,資料經它轉交給BLL層,如今先看下我們用以往傳引數的方式,來編寫的登入buttonclick事件
通過引數傳遞乍看起來清晰易讀,可是這種程式耦合度太高,會為以後的資料變動和維護埋下隱患。比如,須要傳遞的資料新增了一個ID,user=mgr.SelectUserLogin(userName,password)行程式碼就要修改一次,如果再新增一個Level呢?難道需求每變動一次,就要修改一次程式碼嗎?如今須要傳遞的引數才幾個,如果做大一點的系統,面對十幾二十個引數,每一個用到它的地方都要改,這樣不累也會被煩死的。
為了解決問題,實體物件應運而生,它把這些變化都封裝到了一個類中,樣例修改例如以下
傳實體的方式非常好的攻克了這種安全隱患,所以在三層架構中儘管各個層次的程式集僅僅是引用實體,可是它的作用不可小覷。
返回實體與返回DataTable
在上邊我們使用了傳實體的方式來避免傳引數帶來的安全隱患,那麼資料到達最底層DAL後將以什麼形式返回呢?在這裡又出現了兩種方式:返回實體or返回表,以下是返回實體的情況
DAL層須要對資料庫進行查詢和讀取操作,上述樣例在DAL層用了返回實體的方式來獲取資料處理的結果。在這裡實體的來源是DataTable進行屬性的反射後得到的,但反射本身並不高效。使用實體,是為了符合分層規範而且能夠使程式更加的物件導向,而DataTable效能好且更靈活,所以對於獲取的資料量不大而且不須要對資料做太多處理的情況,返回實體應該是比較好的選擇,反之則用DataTable。