這篇文章談一談如果我是個軟體架構師(自己還遠遠不夠一個架構師),自己如何去設計一套系統。當然自己才疏學淺,考略不周,但是寫的都是自己思考過的和掌握的知識。
我沒做過多資料庫和多種語言開發的系統,所以這裡的資料庫只限定於SqlServer和dotnet平台。
資料庫訪問部分:
這裡的核心是預存程序。我設計的這套系統的架構資料訪問部分以預存程序為核心。分為四個部分:
1、預存程序:資料庫操作都是預存程序。
2、實體層:實體類的屬性和資料庫表的欄位一一對應,有多少個表就有多少實體類。
3、資料訪問層:資料訪問層的代碼是用來調用預存程序的。
4、資料商務邏輯層:資料商務邏輯層用來調用資料訪問層。
這裡只想談談資料的查詢。這個簡單的架構中,使用DataSet來取值,對於一條記錄的查詢(也就是根據主鍵來查詢的操作),我將擷取的DataSet中的DataTable的第一筆記錄,並轉換成一個實體,將這個實體將由資料訪問層傳遞到資料商務邏輯層。對於串連查詢或者多筆記錄的查詢,直接使用DataTable或者DataSet來傳遞(對於串連查詢如果使用List我感覺十分不便,使用DataTable或則DataSet卻非常方便)。資料查詢都通過分頁處理。
說明:這些資料庫訪問的代碼可以由CodeSimith,或者自己寫的代碼產生器去產生。
資料通訊部分(服務):
這個使用WCF技術,將前面述說的資料庫訪問層的代碼放在WCF服務中。
根據用戶端的需求情況定義WCF的服務契約。在WCF服務契約中調用資料訪問部分中的資料商務邏輯層。
使用WCF的好處在於你可以不用考略用戶端是使用什麼技術開發的,方便的進行分布式開發。
WCF服務與用戶端資料交換使用字串。如果有資料商務邏輯層返回的是一個實體,則將此實體序列化為字串;如果是DataTable,也序列化為字串。
用戶端部分(UI):
這裡以ASP.NET MVC實現用戶端為例。當然用戶端可以多種多樣,你也可以使用Windows Form、WPF、ASP.NET等。
我們知道ASP.NET MVC,可以分成 Model、View、Controller。
Model:使用Repository模式。會在Repository中定義一些方法去調用WCF。對於實體類,一部分可以直接沿用第一部分的資料訪問中的實體類。我們還可以定義一些ViewModel。由於在WCF服務中擷取的資料是字串,這個需要一個步驟將它們轉換為實體或者DataTable。對於是實體的字串,直接還原序列化就行了。對於DataTable,還原序列化為DataTable之後,還將它轉換成List。對於多表串連查詢的情況,我們在MVC項目中會定義一個對應的ViewModel,將此類預存程序查詢出的DataTable轉換成ViewModel的List。
Controller:使用依賴注入的方式。通過Controller的建構函式注入Repository。
View:這部分重點是美工。
異常處理:
可以參考我翻譯的這篇文章異常處理準則
Tlog:
略
緩衝:
Memcached
總結:這個是我自己思考出的一個東西,並沒有在實際中運用。歡迎大家批評指正。