《自己動手寫框架7》 關於框架體系與戰術的思考

2021-07-03 03:34:16 字數 4291 閱讀 5342

什麼是框架?

這個問題實際上許多「做框架」的人也不明白。 框架和庫的本質不同在於:

當然,關於這兩貨之間的比較,還有許多個角度,但我個人覺得本質是我上面舉的這些。

設計的時候應該考慮哪些問題?這個問題的答案,如果用一句話來解符號,那答案就是:要仔細考慮使用這個框架的人感受,要考慮如何讓使用者感覺爽的問題。當然如果是三天兩天說不清楚的方式,那就得從方**,問題領域,設計原則等待進行闡述了。

怎樣才是乙個及格的框架?這個問題,用一句話解釋,就是在滿足上乙個問題的情況下不違背基本設計原則,那麼就可以算是乙個及格的框架。如果用三天兩天說明,那就要把所有的基本設計原則拿出來,乙個個講講清楚,乙個個說說明白。 

如果滿足了第乙個條件,使用者是滿意的,從使用來說是不錯的;如果滿足了第二個條件來說,從設計及實現來說是不錯的。如果兩個都滿足了那說明,最起碼是可用的及格的框架,當然也可能得分更多。

開源框架的體系與戰術

順便,今天還談談框架的體系與戰術性角度,一家之言,說得不對還請海涵。

從軍事上來說,戰術性的戰鬥就是具體的一塊無關緊要的戰鬥,勝就勝了,敗就敗了,區域性互有長短,但是就全域性來說沒有本質的影響;而體系性的則是影響雙方勢力對比的重要關鍵點,是個死去活來的問題,是西風壓倒東風還是東風壓倒西風的問題。

做框架也是有同樣的問題的,如果框架只能解決乙個區域性部分,或者說具體問題,那麼就是戰術性框架;比如乙個xml解析器,乙個網路爬蟲框架等等,都是解決具體問題的,因此不管做得怎麼到位,怎麼好,都是乙個戰術性的問題。

那麼我再拿人們常說ssh框架來說,很明顯hibernate和struts是屬於戰術性框架的。但是spring則明顯不同,表面上spring本身只是提供了一系列的機制和體系,但是它本身並不做具體的某個方面的問題,他解決ioc,aop之類的比較虛的問題,但是正因為如此,它佔據了整個開源框架的核心位置,許許多多的別的框架都是非常容易被替換及剔除的,但是唯一的要剔除spring就比較困難--或者說,剔除spring,就需要找乙個比spring更好的方案來替代,沒有找到之前,就很難真正剔除它。

偶也看了osc上一些同學的框架的源**,從解決具體的問題來說,技巧、慎密性、前衛性都不錯,但是看來看去,感覺還是在戰術性問題上打轉轉,也就是解決具體問題方面做得非常不錯,但是在體系性方面就比較弱了。

在此,我也把自己對框架(framework)的理解和大家交流,我的理解framework一定是framework框架者構建的結構性、體系性、機制性的部分,而讓使用者提供實際的、業務的、具體的實現的部分;當然framework構建者也可以提供一些實際的、業務的、具體的實現的部分,但是這只可以作為預設的、基本的實現,它在大多數的情況下都是夠用的,但是在特殊情況下是可以被拿掉的,是可以被替換的。

也就是說,如果你達到上面要求,你才可以說是乙個框架(framework),否則,你只是個library,只是乙個**庫,不能稱之為乙個框架。

可能有的同學們又說了,你呼扯海說了半天,你現在設計的框架怎麼就是有體系性的了??這正是我下面要解釋的問題:

1.通過大量的體系性上思考,它不僅立足於解決開發問題,還考慮整合、發布、維護方面的問題。

2.構建了許多子框架,比如:流程框架,外掛程式框架、ui框架等等,這些框架只有體系和機制及規範方面的內容,本身是不提供具體功能的,但是業務開發人員可以基於其之上進行擴充套件,來達成各種目標。

3.在在實現方面大都考慮有侵入性及無侵入性,也就是說如果你可以接受侵入性,那你就做起來更方便;如果你不接受侵入性,那麼也可以使用tiny框架的許多功能。

4.在整合方面下的功夫是最大的,可以方便實現自組裝,也就是扔進去不用管的模式。

5.在模組化方面也是投入大量的力量,所有的資源都可以打入jar包,不必修改web.xml就可以進行各種web模板的載入等待。

6.戰略性目標是構建乙個生態圈,做ui的,做邏輯的,做業務的能夠做自己擅長的事情,通力協作。

所以,正因為tiny框架做了許多體系性的工作,可能不能直接實現某個功能,但是它的作為體系在開發、協作、維護、支援各個階段。

當然,我們正在設計的框架中也包含了大量的解決實際問題的庫和框架,同時也不拒絕各種開源框架的整合與使用。

因此,大的開發框架是個體系性的工程。所以,做開源框架之前,先要定位準確,是做戰術性的還是體系性的框架,這樣只做自己擅長,可控的事情,才得心應手,輕鬆愉快,同時又可以獲得最大回報。

什麼是框架?

這個問題實際上許多「做框架」的人也不明白。 框架和庫的本質不同在於:

當然,關於這兩貨之間的比較,還有許多個角度,但我個人覺得本質是我上面舉的這些。

設計的時候應該考慮哪些問題?這個問題的答案,如果用一句話來解符號,那答案就是:要仔細考慮使用這個框架的人感受,要考慮如何讓使用者感覺爽的問題。當然如果是三天兩天說不清楚的方式,那就得從方**,問題領域,設計原則等待進行闡述了。

怎樣才是乙個及格的框架?這個問題,用一句話解釋,就是在滿足上乙個問題的情況下不違背基本設計原則,那麼就可以算是乙個及格的框架。如果用三天兩天說明,那就要把所有的基本設計原則拿出來,乙個個講講清楚,乙個個說說明白。 

如果滿足了第乙個條件,使用者是滿意的,從使用來說是不錯的;如果滿足了第二個條件來說,從設計及實現來說是不錯的。如果兩個都滿足了那說明,最起碼是可用的及格的框架,當然也可能得分更多。

開源框架的體系與戰術

順便,今天還談談框架的體系與戰術性角度,一家之言,說得不對還請海涵。

從軍事上來說,戰術性的戰鬥就是具體的一塊無關緊要的戰鬥,勝就勝了,敗就敗了,區域性互有長短,但是就全域性來說沒有本質的影響;而體系性的則是影響雙方勢力對比的重要關鍵點,是個死去活來的問題,是西風壓倒東風還是東風壓倒西風的問題。

做框架也是有同樣的問題的,如果框架只能解決乙個區域性部分,或者說具體問題,那麼就是戰術性框架;比如乙個xml解析器,乙個網路爬蟲框架等等,都是解決具體問題的,因此不管做得怎麼到位,怎麼好,都是乙個戰術性的問題。

那麼我再拿人們常說ssh框架來說,很明顯hibernate和struts是屬於戰術性框架的。但是spring則明顯不同,表面上spring本身只是提供了一系列的機制和體系,但是它本身並不做具體的某個方面的問題,他解決ioc,aop之類的比較虛的問題,但是正因為如此,它佔據了整個開源框架的核心位置,許許多多的別的框架都是非常容易被替換及剔除的,但是唯一的要剔除spring就比較困難--或者說,剔除spring,就需要找乙個比spring更好的方案來替代,沒有找到之前,就很難真正剔除它。

偶也看了osc上一些同學的框架的源**,從解決具體的問題來說,技巧、慎密性、前衛性都不錯,但是看來看去,感覺還是在戰術性問題上打轉轉,也就是解決具體問題方面做得非常不錯,但是在體系性方面就比較弱了。

在此,我也把自己對框架(framework)的理解和大家交流,我的理解framework一定是framework框架者構建的結構性、體系性、機制性的部分,而讓使用者提供實際的、業務的、具體的實現的部分;當然framework構建者也可以提供一些實際的、業務的、具體的實現的部分,但是這只可以作為預設的、基本的實現,它在大多數的情況下都是夠用的,但是在特殊情況下是可以被拿掉的,是可以被替換的。

也就是說,如果你達到上面要求,你才可以說是乙個框架(framework),否則,你只是個library,只是乙個**庫,不能稱之為乙個框架。

可能有的同學們又說了,你呼扯海說了半天,你現在設計的框架怎麼就是有體系性的了??這正是我下面要解釋的問題:

1.通過大量的體系性上思考,它不僅立足於解決開發問題,還考慮整合、發布、維護方面的問題。

2.構建了許多子框架,比如:流程框架,外掛程式框架、ui框架等等,這些框架只有體系和機制及規範方面的內容,本身是不提供具體功能的,但是業務開發人員可以基於其之上進行擴充套件,來達成各種目標。

3.在在實現方面大都考慮有侵入性及無侵入性,也就是說如果你可以接受侵入性,那你就做起來更方便;如果你不接受侵入性,那麼也可以使用tiny框架的許多功能。

4.在整合方面下的功夫是最大的,可以方便實現自組裝,也就是扔進去不用管的模式。

5.在模組化方面也是投入大量的力量,所有的資源都可以打入jar包,不必修改web.xml就可以進行各種web模板的載入等待。

6.戰略性目標是構建乙個生態圈,做ui的,做邏輯的,做業務的能夠做自己擅長的事情,通力協作。

所以,正因為tiny框架做了許多體系性的工作,可能不能直接實現某個功能,但是它的作為體系在開發、協作、維護、支援各個階段。

當然,我們正在設計的框架中也包含了大量的解決實際問題的庫和框架,同時也不拒絕各種開源框架的整合與使用。

因此,大的開發框架是個體系性的工程。所以,做開源框架之前,先要定位準確,是做戰術性的還是體系性的框架,這樣只做自己擅長,可控的事情,才得心應手,輕鬆愉快,同時又可以獲得最大回報。

《自己動手寫框架7》 關於框架體系與戰術的思考

什麼是框架?這個問題實際上許多 做框架 的人也不明白。框架和庫的本質不同在於 當然,關於這兩貨之間的比較,還有許多個角度,但我個人覺得本質是我上面舉的這些。設計的時候應該考慮哪些問題?這個問題的答案,如果用一句話來解符號,那答案就是 要仔細考慮使用這個框架的人感受,要考慮如何讓使用者感覺爽的問題。當...

自己動手寫AJAX框架

如果你了解了js物件導向,http協議,那麼就自己動手寫乙個ajax框架就可以了。小技術,大家不要笑啊!原始碼 注釋就不寫了,應該不難看懂的 使用就很簡單了。1.先插入引用。2.然後寫 js ajaxtest.htm 3.用c 建乙個一般處理程式 ajaxtest.ashx 這裡的框架使用就和jqu...

自己動手寫框架 一

php框架接觸有一段時間,主要是kohana和thinkphp。這兩個框架各有各的特色,總體來說kohana還是相對來說比較簡單,但是國內資料較少。簡單的,我把我的這個框架命名為demo.框架搭建第一步,總體目錄規劃 classes controller models views template ...