8 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
我覺得Controller
不負(fù)責(zé)處理數(shù)據(jù)是正確的, 因?yàn)樵?code>spring-mvc中Controller
是不能復(fù)用的, 但是如果你把業(yè)務(wù)邏輯抽象成Service
, 那么這個(gè)Service
就是可以復(fù)用的.
至于你說的 "在Controller就將對象封裝好了,就免于在Service的方法中多次封裝" , 沒太明白什么意思, 你每個(gè)Service
需要什么參數(shù), Controller
就給什么參數(shù), 至于需要的參數(shù)是否需要封裝成對象就可以自己權(quán)衡了.
你所說的login(String username,String password)
, 你想抽象成Service
用異常處理處理多種不同的結(jié)果, 這個(gè)我覺得完全沒有問題, 而且我覺得非常好啊, 很多認(rèn)證框架都用的這種方式, 至少我看的apache-shiro
就是用異常處理認(rèn)證失敗的不同情況的.

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
第一個(gè)問題感覺沒有標(biāo)準(zhǔn)答案,具體情況具體分析,邏輯分層清晰易于維護(hù)就好。
第二個(gè)問題的話,你這里給出的交互是隸屬于權(quán)限控制的,一般用filter、aop、代理、反射等等方式實(shí)現(xiàn)代碼收束都可以,異常也在這些集中控制的代碼里扔一次就好,直接在Controller里硬編碼我反倒覺得累贅。Service這一層更多的是調(diào)用Dao層的方法來實(shí)現(xiàn)一些復(fù)雜的涉及多表的業(yè)務(wù)邏輯處理,事務(wù)也放在這一層(當(dāng)然現(xiàn)在框架把這事兒都干了),所以Service這一層一般不扔異常(參數(shù)驗(yàn)證在Controller以及之前的層次都做掉了因此不出現(xiàn)業(yè)務(wù)相關(guān)異常,而Dao把數(shù)據(jù)庫相關(guān)的底層異常屏蔽了)。
當(dāng)然這是個(gè)人看法,沒有定式,還是那句話,分層清晰易于維護(hù)就好。

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
1、Controller默認(rèn)是單例的,但可用@Scope(value = "prototype")替換
2、登錄可以返回int啊,自己加個(gè)枚舉
3、規(guī)定是在Service層處理邏輯,要看業(yè)務(wù)的吧,代碼冗余度低些好,也好優(yōu)化
大家觀點(diǎn)會(huì)不同,做開發(fā)更多的還是優(yōu)化改,降低冗余度,而不是必須要怎么做。。。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
1,Controller應(yīng)盡可能的不設(shè)計(jì)業(yè)務(wù)邏輯,只涉及交互
2,Service為可復(fù)用的業(yè)務(wù)邏輯
3,Controller為Service的上級(jí)調(diào)用方
4,你這個(gè)case可以在Service中返回固定的返回值,在Controller層做判斷,并拋出你想相應(yīng)的異常。
當(dāng)然了這只是我們目前的做法,分享一下。。。

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
封裝對象到底在Controller還是Service,還是要看具體的情況,個(gè)人認(rèn)為如果是簡單的參數(shù)在Controller中進(jìn)行封裝時(shí)是完全可以的,如果放到Service反而會(huì)顯得很冗余,而且導(dǎo)致Service通用性變差;對于第二個(gè)問題,不容同意通過枚舉或者不同的狀態(tài)碼來在Controller左做判斷拋出異常,完全可以自己定義一套異常處理機(jī)制,直接在Service層拋出,項(xiàng)目有針對此類業(yè)務(wù)異常的處理機(jī)制,直接兩將Service的錯(cuò)誤信息和錯(cuò)誤碼返回到View層,讓客戶端根據(jù)狀態(tài)碼和錯(cuò)誤信息作處理
添加回答
舉報(bào)