記一次和阿里某總監對話引發的思考:說說你框架的設計思路和優點亮點!

背景:

前不久和阿里的一個技術總監風動聊的時候,他問了這樣一個問題:說說你框架的設計思路和優點?

話說,這個問題,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住一切,自由發揮。

對於經常出現的問題或場景,與其每次都隨機產生答案,不如深度的思考總結出一種較優的固定答案。

最後,不知道用過框架的小夥伴們是什麼感覺?

發佈了513 篇原創文章 · 獲贊 153 · 訪問量 529萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章