自從前幾天寫了篇前端與后端分離的架構文章,總覺得有點意猶未盡的感覺,於是乎准備把寫成一個系統。准備逐漸深入地給大家去展現這個系統的架構。不過,我會寫得比較隨意,基本上想到什么就寫什么,不會有很嚴謹的邏輯關系。
這個系統,是我現在正在開發的一個系統的架構,可不是什么理論或者拍腦袋想出來的。事實上,這個架構我思考了差不多一年了,還在上一家公司工作的時候,這個架構就在我的頭腦中醞釀了,只可惜一直沒有機會讓我去做,很感謝現在的老板,給我這么一個機會,讓我把它變為現實。
我們再來重溫一下我所負責開發的系統的架構:

前段架構
在這個圖里面,大家可以看得到,前端部份,是通個一個數據訪問層去訪問服務端的數據的,可以簡單點說,是把遠程的數據訪問封裝在一個類里。為什么要這么做呢?
我的設計理念里,后端為前端去提供服務,而前端則去消費這些服務。但是,為前端提供服務的,不僅包括我們現在所開發的后端,而且還會有第三方提供的服務。舉一個例子來說:
我們開發的系統,要提供給某個商家去使用,這個商家,已經有現成的會員系統,它包括充值功能,並且這個系統也運行良好。這個商家並不願意拋棄現有的系統,而使用我們提供的會員系統,他只要我們基於產品銷售這個模塊,當會員在網上下單的時候,我們的系統是要從商家提供的會員系統里扣除他的消費金額的。對於這種情況,我期待的是,我們需要做的只是替換掉數據訪問層中的某個模塊即可。所以你會看到,我們的系統是把數據訪問部份獨立了出來,但是實際上,這個數據訪問層,還會包括若干個模塊。
架構的復雜,是為了應對復雜的變化,如果你開發項目,只是在公司內部使用的,當然可以不去考慮這些。但是如果說要作為一個通用的產品,那就不得不去面對各種復雜的變化,尤其是系統集成這一塊。
數據跟蹤
什么叫數據跟蹤呢?就是記錄下每一次數據的變化,比如說,用戶每一次對數據的刪除、修改、插入操作,都要記錄下來。我個人是很討厭數據的假刪除的,特別是到處都充斥着“where delete = true”,"update xxx set delete = true" 之類的代碼。這種代碼與業務是沒有任何關系,但是卻放在業務層里,我認為是非常的不合理的。處理辦法兩種:
1、放在數據訪問層,通過 ORM 去處理,只需要通過配置,就可以把刪除操作變為更新操作。當然,業務層的代碼,還是按刪除來處理。
2、使用的是真刪除,但是對刪除的數據進行記錄。由於把刪除的數據記錄了來,當然也可以把它還原了。
那如何去實現它呢?如果你使用的是 Linq to SQL,大家可以看我之前寫的《Linq to SQL (ALinq) 也來AOP —— ALinq Inject 博客園首發》 ,它會告訴如何把刪除、更新、插入操作攔截下。
使用工廠模式創建實體
你的代碼里是否到處充斥着類似下面的這種代碼呢?
var obj = new Account(); obj.ID = Guid.NewGuid(); obj.CreateDateTime = DateTime.Now;
當然,可以通過代碼生成來解決。但是如果使用的是 Linq to SQL,就沒有那么好辦了。我使用的是另外一種辦法,使用工廠模式來創建實體。例如:
public T CreateEntity<T>() where T : class, new() { var entity = new T() as dynamic; entity.ID = Guid.NewGuid(); entity.CreateDateTime = DateTime.Now; var applicationIdProperty = typeof(T).GetProperty("ApplicationId"); if (applicationIdProperty != null) entity.ApplicationId = this.ApplicationId; return entity; }
好了,這次就先聊到這里,我很希望有更多的人加入我們的團隊,一起去完成這個架構。
招聘開發人員:懂 JQuery、JQuery UI、JQuery Validate、Knockout JS 等JS 框架,略懂 Linq to SQL,能閱讀文檔,根據文檔示例寫代碼。(歡迎勤奮好學的畢業生)
1、側重前端開發,如果有能力,也可以從事后端開發。
2、工作努力認真,對自己負責,也對客戶負責。
加入我們團隊,在我的指導下,只要你肯努力,絕對能夠得很快的成長,相信我。^_^
有興趣的朋友可以加我 QQ 私聊。
地點:上海市閘北區
網站:http://www.vknew.com/index.html
