2 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
取決于model層是否夠亂。
該不該分離出新的層,有無(wú)service層都有各自的好處,沒(méi)有優(yōu)劣。
亂了才拆,不亂不管,就看合適不合適。
如果真的很亂,非拆分不可,想必題主也不會(huì)再提問(wèn),所以推測(cè)現(xiàn)在是剛開(kāi)始亂。
如果真是這樣,其實(shí)這就是開(kāi)始亂了,推薦現(xiàn)在就拆。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
在簡(jiǎn)單的系統(tǒng)里面,分層是這樣的
controller <-> model <-> storage(sql、nosql、cache)
所有的業(yè)務(wù)邏輯都在model上
現(xiàn)在討論一個(gè)常見(jiàn)的場(chǎng)景,用戶下訂單要買(mǎi)點(diǎn)東西,這個(gè)業(yè)務(wù)邏輯涉及到的model類有User(用戶)、Order(訂單)、Goods(商品)
那么下訂單這個(gè)事情是放到User還是Order上?無(wú)論放在User還是Order上,這個(gè)業(yè)務(wù)邏輯都需要多個(gè)model類的參與
這種需求在系統(tǒng)里面越來(lái)越多,你就會(huì)發(fā)現(xiàn)你總有那么幾個(gè)model在不斷的膨脹,這些model之間甚至產(chǎn)生了網(wǎng)狀的相互依賴關(guān)系
需求越復(fù)雜,你越容易陷入這種混亂的局面
service層的作用就是把這些需要多個(gè)model參與的復(fù)雜業(yè)務(wù)邏輯單獨(dú)封裝出來(lái),這些model之間不再發(fā)生直接的依賴,而是在service層內(nèi)協(xié)同完成邏輯
service層的第一個(gè)目的其實(shí)就是對(duì)model層進(jìn)行解耦
業(yè)界對(duì)前面提到的那種不斷膨脹的model稱為“充血模型”,起初對(duì)充血模型進(jìn)行反思的一種解決方案就是“貧血模型”,model里面盡量少放點(diǎn)邏輯,把這些邏輯都移動(dòng)到controller層面去處理,在controller里面調(diào)用多個(gè)model完成業(yè)務(wù)邏輯,也達(dá)到了對(duì)model間解耦的作用
但問(wèn)題就是,業(yè)務(wù)邏輯都放到controller層面了,如果其它的controller也需要相同的業(yè)務(wù)邏輯時(shí),只能在controller里面調(diào)用其它的controller,這樣做既不方便又麻煩
所以后來(lái)還是把這種解耦單獨(dú)放一層,叫service,現(xiàn)在分層就變成這樣
controller <-> service <-> model <-> storage
service層的第二個(gè)作用就是重用
差不多就是這樣
簡(jiǎn)單粗暴的總結(jié)來(lái)說(shuō),如果你的某個(gè)業(yè)務(wù)邏輯,需要用到多個(gè)model,就放到service層里面去,如果只是這個(gè)model自己的事,跟其它的model沒(méi)有任何關(guān)系,就放到model里面就好。
如果你的系統(tǒng)本來(lái)就很小,業(yè)務(wù)邏輯也超級(jí)簡(jiǎn)單,也不存在長(zhǎng)期演進(jìn)迭代的需求,隨你怎么高興怎么寫(xiě)都行。
- 2 回答
- 0 關(guān)注
- 1196 瀏覽
添加回答
舉報(bào)