約定優(yōu)于配置_動力節(jié)點Java學院整理
開始嘗試使用Maven構建項目的時候,驚訝于只需要簡單的幾行xml就可以完成原來ant需要大量xml才能完成的工作。不得不說,人們在經(jīng)過一定技術積累后,總能想到辦法簡化自己的工作。以前做項目,總是寫Ant配置文件,滿足于自己更靈活的配置,而沒有去思考,這么做到底值不值得。
想象一下,如果我們每個人都滿足于自己的私欲,為所欲為,我們的世界會亂成什么樣子?在軟件世界里,如果每個程序員都定義一套自己的規(guī)范,那么我們的軟件會亂成什么樣子?各個版本的瀏覽器就已經(jīng)讓眾多程序員頭痛不已了,更別提其他的了。想到這,你有沒有感覺,其實java的成功,xml的成功,maven的成功都有其必然性,他們的設計理念都包含一個很簡單但很深刻的道理,那就是“通用”。
為什么通用?因為遵循約定。
通用又會帶來另一個好處,那就是學習成本低,當新人加入的時候,很容易上手,主要他了解約定,或者說規(guī)范就可以了。對比一下相同項目的ant腳本和maven腳本,也就是build.xml和pom.xml,你就會明白,我為什么說學習成本低了。如果沒有約定,沒有構建標準,n個項目可以能就要有n中項目目錄結構,n種構建方式。
這種遵循約定寫xml配置的方式就是最優(yōu)的了嗎?只能說是相對罷了。如果我們嚴格遵循約定,甚至可以省略掉xml的編寫,因為xml可能會帶來管理上的混亂。
眾多javaweb的程序員一定都有編寫ssh的xml配置文件的經(jīng)歷,而不知道你是否了解Rails。
Rails 的核心理念也是約定優(yōu)于配置,這意味著在Rails中不會出現(xiàn)XML配置文件。Rails使用Web應用多年來積累的各種常見約定(更具體地說是命名規(guī)則)來代替XML配置文件,而在Rails內(nèi)部的映射與發(fā)現(xiàn)機制根據(jù)這些約定可以實現(xiàn)對象之間的關聯(lián)。
使用約定來代替XML配置文件說明Rails本身完成了大量的底層工作,這意味著使用更少的代碼來實現(xiàn)應用程序是極有可能的。此外,代碼量的縮減也減小了出現(xiàn)bug的可能性,降低了維護程序和升級程序的難度。
如果你有一種“強迫癥”,發(fā)現(xiàn)程序員多少都有點強迫癥,哈哈,就是不愿意遵循約定怎么辦?我只能再寫幾句來試圖說服你。你真的需要那么做嗎?你真的需要那么個性嗎?個性意味著什么?沒有通用性。沒有通用性意味著什么?死亡。你可能還會質疑,微軟的很多東西都沒有通用性,只能運行于windows平臺,照樣活得好好的。但你有沒有想過全球那么多windows用戶,windows的通用性是不可質疑的,間接使運行在它之上的軟件擁有了一定的通用性。如果你還要再舉蘋果,好吧,朋友,你極端了。個性意味著復雜,沒有人喜歡復雜的東西。
既然遵循約定那么有優(yōu)勢,是不是我們就該放棄配置,以約定為王?還得用maven和ant來說事。如果你目前的構建包含一些高度自定義的過程,或者你的項目結構不能輕易變更為maven規(guī)定的項目結構,或者你已經(jīng)寫了一些 Ant 腳本通過一種明確的方法完成一個明確的過程,而這種過程不適合 Maven 標準,你仍然可以使用ANT,或者將ANT腳本作為Maven的一個插件。從這個角度來看,約定不能干所有事情,總有一些是需要你自定義完成的。
綜上,遵循約定雖然損失了一定的靈活性,但可以減少配置,降低復雜性,降低學習成本呢,使程序更優(yōu)美。所以,我更傾向于約定優(yōu)于配置。
相關文章
SpringBoot中的PropertySource原理詳解
這篇文章主要介紹了SpringBoot中的PropertySource原理詳解,PropertySource?是一個非常重要的概念,它允許您在應用程序中定義屬性,并將這些屬性注入到?Spring?環(huán)境中,需要的朋友可以參考下2023-07-07SpringMVC源碼解讀之 HandlerMapping - AbstractDetectingUrlHandlerM
這篇文章主要介紹了SpringMVC源碼解讀之 HandlerMapping - AbstractDetectingUrlHandlerMapping系列初始化的相關資料,需要的朋友可以參考下2016-02-02引入mybatis-plus報 Invalid bound statement錯誤問題的解決方法
這篇文章主要介紹了引入mybatis-plus報 Invalid bound statement錯誤問題的解決方法,需要的朋友可以參考下2020-05-05Spring boot工具類靜態(tài)屬性注入及多環(huán)境配置詳解
這篇文章主要為大家詳細介紹了Spring boot工具類靜態(tài)屬性注入,及多環(huán)境配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Spring Security中successHandler和failureHandler使用方式
這篇文章主要介紹了Spring Security中successHandler和failureHandler使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08springboot高并發(fā)下提高吞吐量的實現(xiàn)
這篇文章主要介紹了springboot高并發(fā)下提高吞吐量的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11