寫下這篇博客,主要是想和大家分享我的思路以及碰到的問題
作為開篇,我打算和您分享如下內容:分析系統,技術的選擇,系統初步構架圖
話不多少,進入正文
假設現在要實現一個學校登記所有教師信息的系統。系統功能十分簡單:對教師信息的增刪改查。
我們幾乎是立即設計出了這樣兩張表(為了增加一點復雜度,這里將Teacher和Contact設計為一對一關系):
系統完成之后,我們一個學校一個學校的去兜售。
賣給A學校之后,他們說:“你這個系統不錯,但是我們學校的教師信息有一些特有字段,希望你們能幫我們加上。”
B學校買了之后,也表示很滿意,但是B學校也有自己獨有的字段需要我們添加
簡單的說,就是一個通用系統的二次開發。
現在來分析一下系統:
1、表中基礎數據是一樣的,但是每個學校有自己的差異字段
2、業務邏輯也是一樣的,但是不排除哪個學校有自己獨特的業務邏輯(比如說Teacher和Contact本來是一對一關系,要改成一對多關系。這種改動出現的概率很小,如果大量出現這種改動,就是需求分析有問題了)
3、每個學校都有自己的服務器,換言之就是每個學校的數據庫是分開的
4、由於數據庫是分開的,所以表中數據級別估測為10W級。如此之少的數據,就不用考慮分布式了
現在分析出了一個關鍵點:數據庫是分開的
表和表的對應關系(一對一,一對多,多對多)是穩定的,不穩定的是差異字段。為了應對這種差異,我們大概有三種方法:表內冗余、冗余表、直接將每個數據庫中的表設計成不同的(Model繼承)
因為各個數據庫獨立,所以采用了Model繼承的方法。關於三種方法的優劣比較,請看這里《我們該如何設計數據庫(三)(續)》
既然要用Model繼承,那么就要使用ORM。我選用的技術是.Net MVC 3 + Entity framework 5
1、Why .Net MVC
每個學校都要有自己的界面,選擇.Net MVC主要是因為T4模板可以節省很多做頁面的時間
2、Why .Net MVC 3
Razor視圖引擎
3、Why EF,not Nhibernata
①EF對Linq的支持好一些
②性能上其實兩者相差不多,但是EF更符合個人審美,畢竟還是覺得Nhibernate的映射有點煩人
4、Why EF 5
EF 5快
綜合上面的分析,在選擇好了技術之后,就可以畫出系統大致的構架圖了:
ModelBase:Model基類。數據在這一層中不耦合
Model:繼承自ModelBase,
DBcontext:數據訪問層
Factory:根據配置來決定具體使用哪一個Model與Context(配置到不用數據庫並使用合適的Model)
DM(Data Manipulation):數據操作層,負責數據的增刪改查。可重載
Service:業務邏輯層
Controller:獲取Service層處理過的數據,返回View顯示。可以在這一層中再次處理數據以滿足不同用戶需求
View:你懂
那么這一篇的內容基本也算寫完了。下一篇打算寫寫Factory和數據操作層。ModelBase和Model比較簡單,就不展開來說了,可以看《我們該如何設計數據庫(三)(續)》並下載其中示例來理解
就此擱筆
PS:爆照。原來自己年輕過啊