編程N年,積累下來的一些方法論,映射到目前本身維護 Legoo內核,須要本身給本身一個概括與抽象,在正式介紹設計架構以前,我先從更爲抽象的角度來看待他,他的設計堅持了什麼原則,這些原則是否正確則留 給讀者本身去評判了,這些準則都是很簡單明瞭,事實上,也能夠做爲大家ITer 設計一些程序框架參考的方法論,抑或拷貝到大家的項目解決方案中,哈哈~~ 以前我也是一直如此,直到創建了屬於我本身認知的知識體系,這些比較飄渺的東西能夠用一個很牛逼的詞彙來形容:「哲學」,好了,吹水無益,仍是仔細閱讀下 文吧!!哇咔咔~~~~~
設計這個內核框架對我影響最大的就是 《Niux內核設計》一書(沒有通讀完,至少代碼是看不懂)
這些比較簡單的準則閱讀起來都很簡單,估計小學畢業的學生就能夠通讀了,然而,就是此次如此簡單的卻被別人容易忽略,而老是去追求架構的完美性與複雜性,生活中的美無處不在,計算機也是一種藝術的體現,然而藝術源自生活,因此,從生活中汲取設計的靈感是最爲重要。
準則第一條:小便是美。 相 對於龐然大物而言,小巧的事物有着無可比擬的巨大優點,其中很重要的一點就是,這些小的事物能夠提供有效而獨特的方式進行結合,從而構建完美龐大的「龐然 大物」,例如 宜家家居 就是源自生活的一個表明性的例子,他的家居歷來不是總體的,並且是進過獨特設計的一個個零件,固然這些零件老是能夠任意組裝,從而迭代出新的家居,源源不 斷,甚至整個裝配有用戶本身設計,他們提供 能夠裝配的零件。冥想吧~~騷年們~~~
準則第二條:讓每個程序只作好一件事。 從 設計角度看,經過集中精力因對單一任務,程序能夠減小不少冗餘的代碼,從而避免太高的資源開銷,減小沒必要要的複雜性與靈活性。從複用的角度看,單一的程序 更加容易被放心的 複用,應爲他 很單一,沒有二義性的功能提供。體如今Java中,我的認爲最小的粒度就是一個Class 只完成一個功能,而且這個功能沒有二義性。放大到SOA,則一個服務製做一個功能,例如密碼加密服務。
準則第三條:捨棄高效而採起可配置性 。軟 件是爲了現實世界中的業務所服務,現實世界中的業務惟一不變的特性就是他一直在變,如何應對這種可變性,那就是把可變的因素儘量的採起配置化處理,而放 棄硬編碼方式的流程處理,儘管硬編碼方式的處理帶來了高效性,可是他失去了靈活性,可配置性一直是軟件行業所追求的終極目標之一,從OSGI到SOA,都 在努力往這個方面努力,至少本人是這樣子認爲的。
準則第四條:讓每一個程序都成爲過濾器。 軟件僅僅是對數據進行過濾加工,而不是創造數據,數據是人創造的(OOB), 程序只是修改數據而不是創造數據,基於這個思想出發,我在設計legoo 內核是,把一切都當作是 Filter,每一個Filter是一個動做,並且這個動做是無狀態(thread-safe),因此能夠複用,複用到anywhere,filer集成的 片斷也能夠處處 複用,這是一個無限的循環。片斷在集成更大的片斷~~~~~~~~~~~~~~~~~片斷在複用。
準則第五條:良好的擴展性。在這 裏我要介紹一下 什麼是擴展性,我說的擴展是基於插件的開發,做爲一名開發人員,做爲討厭就是做爲其代碼螺絲,只能在既定的狀況下無需創新的開發,這種強制性的框架一出生 就是垃圾,把開發人員看成螺絲的框架都是一種螺絲,特別是一些大公司,把程序員看成代碼機器,因此,內核必須有良好的擴展性,用戶能夠擴展本身的插件,內 核與用戶(程序員)成爲一種互動,互爲彌補,而不是單一的約束。
準則第六條:充分利用軟件的複用效應。複用-複用-在複用,如何可以實現,這是內核必須解決的問題之一。軟件盈利的條件之一就是 開發成本,TTM等,以後嚴格控制好開發成本,只有經過大量的複用,才能在短期內編寫出大量的應用程序。
準則第七條:儘快創建原型。原型是採用OOB的思想對用戶需求的一種描述,用戶的需求都是能夠經過OOB進行原型簡歷,這些原型就是數據模型,能夠很快的指導開發。
準則第八條:配置採用文本文件存儲。這一點主要是考慮程序的移植性,儘可能下降程序運行對外部環境的依賴性,特別是做爲內核的設計,legoo內核的自己不依賴於任何框架,是純粹的基於JVM的,它具備很好的適應性與移植性。
準則第九條:充分利用配置的槓桿效應。配 置文件一直都是雙刃劍,利用配置文件能夠增強軟件的可重用性與可移植性,可是配置的複雜性也是須要權衡的,必須把配置文件的使用約束在必定範圍以內,只有 這樣才能更好的使用配置文件。legoo內核 對配置的文件的用法有必定的規範化,用戶的配置必須依賴必定的配置模式,同時也支持用戶對配置文件的擴展,這樣能夠更好地面對各類多變的業務流程。
準則第十條:完成90%的功能支持。這一點是很泛指的準則,任何一個內核都沒法解決所有問題,可是能解決80%以上的已是一個很完美的內核,legoo 內核也是一直在朝這個方向努力。
準則第十一條:部分之和大於總體。小程序集合而成的大程序比單個的大程序更爲靈活,也更爲實用,這是 微積分 思惟的再次重申,小的程序更加具備前瞻性。legoo 內核的的程序粒度爲 方法。
上面羅列出的這些,是我在不斷維護legoo內核時的一些總結,主要是給本身總結的機會,順道分享給你們,但願能多少幫助到基於It界的各位。
這一文章是 做爲 推出 我 legoo 內核架構的第一篇文章,爭取下一篇文章早點面試,其實 這套架構在公司已經全面推廣,這個內核在公司已經做爲 公司的開發平臺使用,爲我下一步編寫 開發平臺白皮書 準備着~~~~