繼續上一篇《ASP.NET開發,從二層至三層,至面向對象 (2)》http://www.cnblogs.com/insus/p/3825805.html 。我們學會了怎樣創建對象,把BizBase類從頁面級分離,解耦合度。親的更親,疏的更疏。
上面使用的是Access數據,將達不到擴展與升級的要求。程序在發展的同時,有可能會轉向SQL數據庫,或是有些模塊外包。在這情形出現,我們需要定制設計規范接口。接手此軟開發的團隊,所在邏輯處層中,實作這個接口即可。
下面Insus.NET嘗試寫一個接口,在程序中應用SQL Server的團隊,不管是在邏輯層中寫SQL語句的,還是在邏輯層傳入參數引用存儲過程的,均可實現統一的接口。
上面標記2的返回DbdataReader函數,是為了它能讓Access數據庫(System.Data.OleDb.OleDbDataReader)與SQL數據庫(System.Data.SqlClient.SqlDataReader)均能實作。由於這兩者均是繼承DbDataReader類。
這樣的話,以前寫的Access數據庫的邏輯類BizBase,實作這個接口,得修改一下,才符合接口的標准:
下面,Insus.NET實現一個邏輯類,是方便用用戶在程序的中習慣寫SQL語句的對象:
接下來,Insus.NET再實現一個邏輯處理類,也是程序與數據庫互通的,不過它是配合SQL Server數據庫的存儲過程來的。當然使用存儲過程,它自然有參數出現。准備之前,先寫一個類Insus.NET.Parameter:
現在就可以創建這個邏輯類了,它有實作接口IBiz:
上面有寫兩個public的property,將是用來給程序對象傳入引用的哪一個存儲過程,以及參數。如果所引用的存儲過程沒有參數,傳入null即可。

private string _ProcedureName; private List<Parameter> _Parameters; public string ProcedureName { get { return _ProcedureName; } set { _ProcedureName = value; } } public List<Parameter> Parameters { get { return _Parameters; } set { _Parameters = value; } }
還有一個私有方法,它是用來創建參數的。如果size傳入為-1的話,系統將使用默認數據類型長度。

private SqlParameter CreateParameter(string parameterName, SqlDbType dbType, Int32 size, object value) { SqlParameter sqlParameter; if (size > 0) sqlParameter = new SqlParameter(parameterName, dbType, size); else sqlParameter = new SqlParameter(parameterName, dbType); sqlParameter.Direction = ParameterDirection.Input; sqlParameter.Value = value; return sqlParameter; }
BizBaseSqlSp這個類別中,每個方法或是函數,均有幾行代碼冗余:
解決冗余,可以把它抽取出來,寫一個私有的方法:
如果你不想多數據庫集成,你完全抽取其中一個邏輯處理類,作為你的類庫。特別是最后一個。不必再問下面這個類庫的原代碼了:http://www.cnblogs.com/insus/archive/2013/05/23/3096045.html
當然,它肯定在asp.net MVC也能用得到。
本篇演示源程序(Access DB; .NET Framework 4.0;):
http://download.cnblogs.com/insus/ASPDOTNET/Asp_OOP3.rar
注:文章太長了,寫成續集,請關注......