一步一步搭架子(分析篇)


寫下這篇博客,主要是想和大家分享我的思路以及碰到的問題

作為開篇,我打算和您分享如下內容:分析系統,技術的選擇,系統初步構架圖

話不多少,進入正文

 

假設現在要實現一個學校登記所有教師信息的系統。系統功能十分簡單:對教師信息的增刪改查。

我們幾乎是立即設計出了這樣兩張表(為了增加一點復雜度,這里將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:爆照。原來自己年輕過啊

 


免責聲明!

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



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