觀察者模式的缺點(diǎn) 如何學(xué)習(xí)spring?是先學(xué)習(xí)設(shè)計(jì)模式還是spring?
如何學(xué)習(xí)spring?是先學(xué)習(xí)設(shè)計(jì)模式還是spring?當(dāng)我看到最后一個(gè)可愛的答案時(shí),我想笑。主要的問題應(yīng)該是我還沒有接觸到spring框架。我有以下學(xué)習(xí)建議:spring框架包含了許多頂級(jí)的架構(gòu)設(shè)計(jì)
如何學(xué)習(xí)spring?是先學(xué)習(xí)設(shè)計(jì)模式還是spring?
當(dāng)我看到最后一個(gè)可愛的答案時(shí),我想笑。主要的問題應(yīng)該是我還沒有接觸到spring框架。我有以下學(xué)習(xí)建議:
spring框架包含了許多頂級(jí)的架構(gòu)設(shè)計(jì)思想。研究它需要很多經(jīng)驗(yàn)。而設(shè)計(jì)模式也是一個(gè)大課題,有一本厚厚的設(shè)計(jì)模式書供你學(xué)習(xí)。所以,我們不能說誰先學(xué)這兩樣?xùn)|西,應(yīng)該用哪兩樣?xùn)|西,應(yīng)該學(xué)哪兩樣?xùn)|西。
有人說設(shè)計(jì)模式是為了彌補(bǔ)Java的缺點(diǎn),這是合理的。把23種傳統(tǒng)的設(shè)計(jì)模式都整理出來需要一點(diǎn)時(shí)間,要學(xué)會(huì)掌握它們確實(shí)很難。
有人說設(shè)計(jì)模式是為了彌補(bǔ)Java語(yǔ)言的缺陷,你覺得是這樣嗎?
如果你從語(yǔ)言的角度來看設(shè)計(jì)模式,那是對(duì)的。一些設(shè)計(jì)模式彌補(bǔ)了Java語(yǔ)言的不足,其中最明顯的是singleton模式。
Java本身不提供單例對(duì)象創(chuàng)建,需要通過單例模式實(shí)現(xiàn)。什么樣的餓、懶、多線程都要注意DCL、易變關(guān)鍵字等,導(dǎo)致面試題很多。
在現(xiàn)代語(yǔ)言中,許多提供了創(chuàng)建單例對(duì)象的語(yǔ)法,例如scala和kotlin的對(duì)象關(guān)鍵字。
從架構(gòu)的角度來看,設(shè)計(jì)模式將組件關(guān)系解耦。
假設(shè)我們要實(shí)現(xiàn)一個(gè)帶有上載服務(wù)的文件服務(wù)器來上載文件。我們可以調(diào)用convertservice來轉(zhuǎn)換文件。Uploadservice屬于核心模塊upload module,convertservice屬于非核心模塊conversion module。
如果uploadservice直接調(diào)用convertservice來執(zhí)行轉(zhuǎn)換,則核心模塊依賴于非核心模塊。如下圖所示:
非核心模塊相對(duì)不穩(wěn)定,核心模塊相對(duì)穩(wěn)定。核心模塊對(duì)非核心模塊的依賴將導(dǎo)致核心模塊的不穩(wěn)定性。所以可以使用策略模式來解耦:
看箭頭方向,現(xiàn)在轉(zhuǎn)換模塊依賴于上傳模塊,轉(zhuǎn)換模塊的變化不會(huì)影響上傳模塊。依賴的方向改變了。這就是傳說中的“依賴倒置”
程序員們?cè)趯懽约河玫男〕绦虻臅r(shí)候會(huì)考慮設(shè)計(jì)模式,編程規(guī)范等什么嗎?
設(shè)計(jì)模式工作得最好,但不要濫用它們;編程規(guī)范工作得最好。
首先,設(shè)計(jì)模式。大多數(shù)時(shí)候,需求可以通過設(shè)計(jì)模式來實(shí)現(xiàn),也可以不通過設(shè)計(jì)模式來實(shí)現(xiàn)。即使使用設(shè)計(jì)模式也會(huì)增加代碼的復(fù)雜性。那么為什么要使用設(shè)計(jì)模式呢?學(xué)習(xí)設(shè)計(jì)模式就是合理組織代碼,如何解耦,如何真正達(dá)到擴(kuò)展開發(fā)的效果??偟膩碚f,我們的程序在開發(fā)之后不能永遠(yuǎn)改變。例如,需求發(fā)生了變化,程序需要擴(kuò)展。合理使用設(shè)計(jì)模式可以減少代碼重構(gòu)中的代碼更改,而不是將其推后。
但是很多新手朋友經(jīng)常會(huì)遇到這樣的問題,在我學(xué)習(xí)了一個(gè)設(shè)計(jì)模式之后,我必須盡最大努力在項(xiàng)目中使用它,這是不必要的。
另一個(gè)是,如果你不這樣寫,你不會(huì)犯任何錯(cuò)誤,但最好是按照標(biāo)準(zhǔn)來寫。例如,命名規(guī)則、何時(shí)換行、代碼縮進(jìn)是兩個(gè)空格還是四個(gè)空格、如何編寫注釋等等。
我建議您看看阿里巴巴的Java開發(fā)手冊(cè)。
關(guān)于RESTAPI的一些規(guī)范,請(qǐng)參考Google的
順便說一句,現(xiàn)在有很多代碼格式工具可用,如果您感興趣,可以查看它們。