【輪子狂魔】序言:有沒有那么一種系統架構,它是無所不能的


 有沒有那么一種系統架構,它是無所不能的?

某時髦靚女上網搜索理想男友:要帥、有車。結果是:象棋。女不甘心,再搜:有房、有錢。結果是:銀行。女還不甘心,再搜:有愛心、體貼人。結果是:奧特曼。女十分生氣,於是將上述全部條件輸入,良久,計算機十分艱難而又緩慢地打出一行字:“奧特曼在銀行下象棋。”

那么,反觀系統架構呢?
我想要的系統架構:能做Winform、Web、WPF、WinCE、Server、大型系統、中型系統、小項目、小工具。
此時計算機會想跟你說2個字:泥煤。 
 
標題黨,你到底要干嘛?
 
與大家一起討論下系統架構。
獨樂樂不如眾樂樂,我有我的想法,你有你的想法,思想碰撞在一起才會有火花,否則它就是一個火種,並不絢麗。
 
那么,問題來了,基於什么樣的系統?
 
正好最近剛做了一個微信對接的小項目,做的稍微復雜了點,是為了下一個比較大的項目做准備。
 
-> 把跟微信的每個接口對接看作為一條指令(Command)。而觸發這條Command執行的是事件(Event),通過處理器(Handler)將Command與Event關聯起來。
-> 為了徹底的解耦業務事件層(Business Event)和指令層(Command),我把引用關系給干掉了。那么沒有引用關系的話,我又如何讓Event觸發Command(Handler)呢?
-> 增加一個調度者(中介者),建立一個關系網,將Event和Command關聯起來。
-> 由於微信對接時,除了獲取AccessToken等個別特殊接口外,其余都要填充AccessToken,而AccessToken又是有使用時間限制的,超時了要更換,使用次數也有限制,不能每次更換。
     那么問題又來了,能不能別煩躁的次次賦值啊?
     親愛的,XX大人,在調度者中增加一個預先處理就可以了,為符合特定規則的處理器(Handler)預先調用其他的處理器。
 
能不能概括一下,到底包含了哪些功能?
 
DataAnnotation:乍一看數據注解好像是沒什么關系。其實是用它來關聯Event和Handler,間接的通過Event觸發Command,而這個配置是在方法上面,以Attribute的方式支持(類似MEF)。
IoC:其實只算是個非常簡陋的實例化對象而已,擴展生命周期也成,只是這並不是重點。
慣例優先原則:這個並不是系統架構中明顯體現出來的,而是借鑒了偉大的ASP.NET MVC的設計思路,說的明白點兒就是口頭約束。
                    不是說強制約束做不了,而是強制約束需要代價,比如編譯級錯誤?運行時錯誤?為了節約成本,我選擇了運行時,而且是很簡單的約束。
反射緩存:調度者的實現其實就是反射,而反射是需要消耗性能的,這里我只是簡單的優化了一下而已,畢竟這不是重點,只需要把反射關系進行緩存,避免每次都掃描一次就好了。
AOP:這個高大上的詞,被我在這里盜用了,在調用Command的前、中、后對各個環節進行攔截,如日志輸出,調用順序監控,數據流轉,執行時間等。當然目前還沒做到這么復雜,只是簡單的完成了調用預先處理器而已。
 
上一段代碼瞧一瞧?
 
 別急,今天只是展開思路,作為一個“序言”。
 接下來的文章會慢慢把這些外衣統統“脫掉”,呦呦呦,外套脫掉脫掉,外套脫掉。
 
PS:這一個系列是以服務端架構為主,不會引用任何第三方的類庫、組件等。
 
最后:各位給點個推薦?讓我更有動力的寫下去,可否? ^_^


免責聲明!

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



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