在我們提高班,到現在為止機房收費系統是每個人的必做項目,而且不止一遍。但是每一遍有每一遍的意義。
第一遍,我們用的VB6.0,當看到這個系統是自己一行一行敲出來的時候,心裡有種不敢相信的感覺,所以我們
建立了興趣,建立了信心,只要堅持,我們一定能夠成功。
第二遍,用VB.NET,這一次就說不好要重做幾次了。我們學習了分層,所以在這要體驗分層帶來的好處,分層
帶來的糾結,分層分了半年多了,卻發現分的還是不好。
第三遍,是基於第二遍的,因為這次,要體驗合作開發的快樂。
經過上次老師講解,在講完的當時,我發現,原來是這個樣子啊。但是好奇心讓我,不得不想著去做兩個Demo
來驗證一下。
首先,說一下這個系統的樣子,系統採取經典三層架構,然後添加了面板模式來對功能進行模組的劃分,還用了
抽象工廠加反射來實現資料庫的更換方便。是架構圖。
此架構通過抽象工廠加反射使得工廠和DAL層沒有依賴的關係,所以在產生的過程中,DAL層的DLL是不會產生
到其他層裡面的bin的Debug下面的,也就使得如果不對DAL層進行那麼一點點處理,那麼是會報錯的,為什麼報錯自
己研究。
我用了兩種方法,一種是在UI層添加了對DAL層的引用(是萬萬不可取的,因為在架構圖上,是沒有任何層對DAL
層進行了依賴。第二種就是講DAL的產生路徑改成了UI下的bin的Debug。
對於第一種,因為違反了架構圖,所以做法不可取,但是,是不是我在UI層添加了對DAL層的引用,那麼編寫好
的程式打包後DAL不是僅僅打包成一個.dll檔案,而是將DAL.dll檔案打包到UI中了,那麼在更換了DAL.dll後,程式就
無法運行。按照上面的架構來說,就是說BLL中原來的登陸檢查是只檢查是否已登陸,那麼我現在講BLL中的登陸方
法體改成先檢查是否存在此帳號,然後再檢查是否已經登陸,然後將產生好的dll替換原來的,那麼程式依然只是還執
行只檢查是否已登陸。
我後來做了個實驗,下面我用一個比較簡單的實驗來澄清這個事情。
首先我們建一個經典的三層架構吧,下面是架構以及參考關聯性:
每層中的代碼如下:
UI
Imports BLLPublic Class btnTest Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objTest As New TestManage MsgBox(objTest.TestDemo()) End SubEnd Class
BLL
Imports DALPublic Class TestManage Public Function TestDemo() As String Dim objTest As New TestDAO Return objTest.TestDemo() End FunctionEnd Class
DAL
Public Class TestDAO Public Function TestDemo() As String Return "這是原來的DAL層" End FunctionEnd Class
打包,安裝,運行介面如下:
現在,三層是順序依賴的,如果按照老師說的,那麼如果我如果只使得DAL層的介面保持一致,而DAL層中的代碼發生變化,那麼程式將無法執行,可是事實是,我建立了一個解決方案,然後重新寫了DAL,然後對DAL進行替換,下面是新DAL層中的代碼
然後產生,進行替換,運行結果如下:
所以,通過此實驗,發現如果在UI層對DAL層進行了添加引用。所以我感覺引用只是把dll複製到了自己目錄下的bin/Debug下,之所以不能再UI層添加DAL層的引用,是因為違反了架構,所以需要做的是該產生路徑。
但是引用到底還包含哪些呢?求大蝦們賜教。