背景:
前不久和阿里的一個技術總監風動聊的時候,他問了這樣一個問題:說說你框架的設計思路和優點?
話說,這個問題,5年前開始就一直經常出現在眼前,可我從沒認真爲它找出過答案!
於是,夜深深,我躺在牀上,用筆記本,一邊思考,一邊打字,試着找尋!
這些年來,我的框架或作品,都快湊滿十二個了,每個單獨都可以說上好幾天。
但如果時間只有半小時,我要怎麼介紹呢?介紹哪些呢?
出現在腦海裏的框架有三個:CYQ.Data、ASP.NET Aries、Taurus.MVC。
大概是因爲近期的精力都在這上面吧的吧(如當年我精力花在Qblog一樣吧)。
說說你框架的設計思路?
框架的設計思路?哪個框架?我自己挑一個?
如果要講Aries或Taurus,就必須講CYQ.Data,因爲它們都是基於CYQ.Data的存在而存在的。
所以問題就變成回答:說說你CYQ.Data框架的設計思路?
我感覺很難回答這個問題,內心也能感受到一絲抗拒這個問題的想法?
框架是漫長的歲月演進重構而來的,最早期的思路是這樣的:
構造一個簡單的MDataTable體系,傳進一個表名,根據數據庫鏈接拿到表結構,再根據行的列構造出SQL語句執行,把數據讀到MDataTable返回。
以上一句概括了最早期的思路,但沒有設計,簡單並不亮。
如果要說說最新版本的設計思路,我想不到該怎麼表達,因爲重構的次數太多了,幾百上千次了,太多細節,每個細節都獨立帶有它自己的設計思維。
就像騰迅最早也只是QQ發個消息,現在發展到生態圈,你說人家是怎麼設計現在的帝國的?
也許,只是做着做着,就這樣子了〜〜〜纔是答案吧。
好吧,設計思路回答不上來,那就講講框架有什麼亮點吧?
我了個去,又是這個問題,一個在我內心深深留下傷痕的問題。
我曾經用盡洪荒之力寫過一篇文章,來介紹框架的優勢,可是我現在記不起來了!
只能忘掉文章,重新思索了:
1:框架支持多數據庫。(旁白:支持多數據庫的框架到處有吧)
2:嗯,重點框架能把數據從一種數據庫轉向任意一種數據庫(旁白:項目裏需要混合數據庫的場景太少,這功能沒啥感覺)
再想想:
1:框架的緩存集成了Memcache、Redis(旁白:集成不是很簡單的事情麼?)
2:嗯,但客戶端沒有引用第三方,都是自己寫的,Json解析都是自己寫的(旁白:只能說技術好,但功能不算亮點)
再想想:
1:框架實現了自動緩存。(旁白:緩存有啥特別,Hibernate也有二級緩存,說說你它有啥區別?)
2:嗯,Hibernate的二級緩存沒法自動失效,因爲它的失效策略沒法處理自定義的sql語句(旁白:你是怎麼控制的?)
3:嗯,我是通過分析執行的SQL語句,得到語句所關聯的表,通過表這個維度來控制的(旁白:那不會產生很多緩存無效問題?表的修改無處不在,能控制到行麼?)
4:不能,但可以控制列,嗯,所以我還設計了,可以指定忽略哪些字段的更新不觸發緩存失效,也可以指定哪些表不需要緩存(旁白:如果不在SQL層面,在應用層面如何控制緩存失效?)
5:在業務代碼控制吧?或者通過AOP統一控制?(旁白:不是我想要的答案)
6:也可以通過數據庫來觸發緩存失效,MSSQL就有提供緩存依賴(旁白:具體怎麼實現呢?)
7:微軟的直接調就好了,具體原理是通過觸發器把修改的數據寫入指定的表,再通過定時器掃表。(旁白:也不是我想要的答案,還有其它答案麼?)
8:沒有了,你說說(旁白:以前好像講過,現在想不起來了,說說你那個Aries框架的亮點吧)
半小時已經差不多了,亮點依舊沒有被感覺出來〜〜〜
Aries的亮點?我還沒恢復洪荒之力再給它寫一篇框架的優勢篇呢,該怎麼介紹?
1:嗯,框架就是傳一個表名,就可以自動生成增刪改查導入導出,還自定義了一套簡單的前端語法,結合後端很容易開發(旁白:不知道你說什麼,還是閒聊一下其它的吧.....)
-------------------重新思考,若只有半小時,該怎麼介紹框架-----------------
介紹:CYQ.Data的亮點
思考了1天,發現亮點功能太多:元數據緩存、AOP、UI交互、調試、模板引擎、Json工具、DB工具、分佈式緩存、批量、內存表、文本數據庫、防SQL注入、多數據庫轉換等。
如果一個一個介紹及聊其技術細節,十年的成果,講三天三夜也沒完!
可如果時間有限,只能講三個,那我必須對其進行抽象總結。
經過反覆的思考,忽略人有我優,只選人無我有的角度,總結了三個核心:
1:自動緩存:抗併發。
對於中小型項目,自動解決抗併發問題,提升網站性能、簡化代碼,精簡架構!
對於大型的高併發大數據量的複雜業務,緩存還是要進一步細化控制命中率。
2:水平擴展:零編碼。
A:單種類數據庫擴展到多種類數據庫。
B:單機緩存擴展到分佈式緩存。
C:單數據庫擴展到集羣數據庫(讀寫分離)。
通通只要簡單追加配置即可。
3:數據結構:自由轉。
A:Json、Xml、實體類:可互轉。
B:泛型、字典、集合,與A類:可互轉。
C:數據庫表與A類、B類:可互轉。
感覺這樣抽象總結後,應該半小時就可以介紹完重點了,哈〜〜
至於星座十二宮框架:ASP.NET Aries(白羊)、Taurus.MVC(金牛)、還有在重寫中的第三星座Gemini.Workflow(雙子)。
該怎麼抽象其介紹,需要多幾個夜晚待我仔細想想〜〜〜
總結:
通過本次思考,意識到兩個問題:
1:曾以爲好的作品,不需要去告訴用戶怎麼好,用了自然知道好在哪裏。
首先天真的假設了用戶首先會用,其次假設了用戶會口口相傳。
2:曾經以爲經驗豐富就可以Hold住一切,自由發揮。
對於經常出現的問題或場景,與其每次都隨機產生答案,不如深度的思考總結出一種較優的固定答案。
最後,不知道用過框架的小夥伴們是什麼感覺?