ASP.NET開發,從二層至三層,至面向對象


昨天Insus.NET有寫了一篇博文《WEB控件沒有什么所謂好不好,而是用得好不好http://www.cnblogs.com/insus/p/3821644.html  很多網友持意見相左看法,Insus.NET在評論之中也有作出個人回復,見#29與#30樓。

本篇Insus.NET繼續再以Web控件來開發,如果你對Web控件無興趣,只能說聲抱歉,可以略過。

數據庫是以Access為例。Insus.NET好象從沒有有在商業上用過Access數據,全是SQL Server。沒有關系,用什么都一樣。




接下來,我們將在asp.net網站上,對這個表進行添加,獲取數據,更新,刪除等一系列操作。每天也許都是重復這些操作,正因為這是最基本功能操作。就是如我們每天吃飯與步行一樣。

先實現往數據庫插入數據,在.aspx html markup網頁上,拉幾個TextBox文本框和一個Button銨鈕:


可以切換至.aspx.cs寫按鈕的添加事件ButtonAdd_Click()。由於Item_nbr是一個唯一主鍵,在添加之前,需要作為判斷一下,是否已經存在。如果不存在,可以把記錄插入。這需要在寫程序時想到的問題。

先看看判斷是怎樣寫?



如果Item_nbr字段值已經存在數據庫中。程序會提示並return出添加事件。反之,它會繼續跑下面程序:


上面分別應用了OleDbReader和OleDbCommand來判斷與執行插入的SQL語句。數據存儲入數據庫之后,我們需要把想要的數據顯示出來,而不是讓用戶直接去看數據庫內的表。
在.aspx網頁,拉一個GridView控件:


在網頁顯示時,數據也一起顯示:


在asp.net網頁上,我們能有維護數據的功能,如有添加時有可以寫錯填錯,可以編輯更新,或是對一些記錄要有刪除等。在GridView控件上,添加一列和設置DataKeyNames屬性:

 

 下面寫一下刪除方法的程序:

 

 如果想實現更新的話,它跟獲取數據,刪除數據的程序一樣,只是傳入的SQL語句不一樣。下面再實現一個功能,就是獲取某筆記錄某一單獨字段值:

 

 事件程序,可以參考:


好了,上面所有功能,是這次Insus.NET想表達的。
說句實在話,Insus.NET在十年前的剛開始學習和使用.NET Framework2.0寫asp.net時,不知花上多少努力與時間才寫出來。現在回過頭寫,算得上去車輕路熟。

實時演示一下上面所有功能:



演示完畢,回過頭來看看剛才寫的代碼,有兩行代碼在每一個方法或是與數據庫關聯操作,均出現:



對了,這些可以寫入Web.config文件中去,以后變更數據庫時,可以直接去Web.config文件中修改,不必每一頁,每一個函數去找出來改,這樣容易漏改,或錯改。



這樣子,所有那兩行代碼,均可改為:



Insus.NET使用Replace()方法,去替代數據庫路徑。

上面所有實現,算得上是兩層,頁面級的。
這只是一些練習而已。接下來,你又想在數據庫添加另一個張表,實存儲另外一些數據。如會員,訂單等。每張表的處理,基本上均需要實現上面的功能,添加,更新,刪除等功能。你想到的方法,照着上面的方法,重新寫一份。稍微更好的方法,就是把上面的網頁復制一份,改名。然后修改其中的SQL語句即可。

當這些功能要求越來越多,每加一個,就復制一個,改一個。一些代碼不停重復地做時,網頁也隨之不停的澎大,維護起來隨之困難。因此我們自不有然地會想到要怎樣去重構與簡潔它們。

 
OK,由於這些代碼的耦合性很強,我們在學習面向對象時,可以創建一個對象,如BizBase,把這些處理數據庫的代碼搬移至這個新建的對象中。先從Data_Binding()方法入手,這是從數據庫獲取數據的方法。


只有高亮塊代碼是告穩定性,紅色箭頭是兩個變量。我們可以把這兩個變量在BizBase定義為屬性。


然后把穩定性代碼,創建為一個方法:

再來看看Data_Binding()中,是怎樣使用這個對象的方法的:



經這樣一封裝,三層樣子已經出來了。處理邏輯的代碼已經跑進BizBase這個類中去了。在.aspx.cs中,我們只管傳經常性變化SQL語句即可。接下來,我們繼續實現刪除方法,判斷,插入的函數,把穩定性的代碼搬移至BizBase對象中。



有了這個類別,我們就可以改寫最初寫的代碼,或是有新建的網頁,只要涉及至與數據庫的SELECT,INSERT,UPDATE或DELETE時,均可以使用上面的方法。
這也可以算得上我們常說的邏輯層(基本)的。

繼續重構與修改網頁,先是判斷記錄是否存在:

 

添加記錄至數據庫的方法,重構如下:

 

 刪除方法的代碼重構如下:

 

獲取標量值的方法重構如下:

 

 剛才經過一系列大整改,大挪移,先休息一下,沖杯Coffee。休息是為了能走更遠的路。

現在我們在.aspx.cs網頁上看到我們所寫的代碼,還是兩句在幾處地方重復出現:

 string mdb = System.Web.Configuration.WebConfigurationManager.AppSettings["mdb"];
string _connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["InsusConnectionString"].ConnectionString.Replace("mdb", Server.MapPath(mdb));


這樣,我也可以把它們移至BizBase類別中去:


寫在構造函數public BizBase()上面,把兩句改寫為一句。由於我們已經把這個connectionstring移至BizBase類了,因此這個類別中的ConnectionString屬性拿掉:



 在.aspx.cs的網頁中,下面的代碼已經變得多余了,義不容遲,把它們刪除,凈化我們的代碼:

 

 寫到這里,相信你多少了解一些,我們的邏輯類庫是怎樣產生的。以后不管有多少個表,需要添加,刪除,更新或是獲取數據(數據集還是標量值),只需實例化BizBase類,傳入SQL語句,執行相關的方法。

本篇演示源程序(Access DB; .NET Framework 4.0;):
http://download.cnblogs.com/insus/ASPDOTNET/Asp_OOP.rar


注:文章太長了,寫成續集,請關注......
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM