鍍金池/ 問答/Java/ 關(guān)于servlet與service分離,自己在寫小項(xiàng)目練習(xí)時(shí)的困惑

關(guān)于servlet與service分離,自己在寫小項(xiàng)目練習(xí)時(shí)的困惑

為了解耦,學(xué)習(xí)到要求 servlet 要與 Service 分離( jsp/servlet 表現(xiàn)層; service 業(yè)務(wù)邏輯層; Dao 持久化層),但自己在寫小項(xiàng)目實(shí)踐練習(xí)時(shí)感覺很難受,比如:
用戶登錄成功之后,應(yīng)該向 request 域中注入登錄成功的 msg,即

request.setAttribute("msg","登錄成功");

因?yàn)樵?jsp 中會(huì)有

${requestScope.msg}

可這件事不應(yīng)該屬于業(yè)務(wù)邏輯嗎?而 Service 層中不應(yīng)該拿到 request 這個(gè)東西,只能交給 servlet 去完成嗎?
如果說這件事最終影響的是 jsp 層,也就是表示層,所以可以把它交給 servlet 來處理,好吧。那現(xiàn)在我碰上這么一個(gè)情況,網(wǎng)站的會(huì)員還有不同的權(quán)限。登錄成功之后我想要把用戶的權(quán)限信息注入到 session 中

request.getSession.setAttribute("authority","admin");

這該是業(yè)務(wù)邏輯層的事情了吧?可 Service 層理論上不能接收 request 對(duì)象的話應(yīng)該完成不了這種任務(wù)。
而且如果要交給 Servlet 去做的話,相當(dāng)于 login 方法還要返回一個(gè) User 對(duì)象,然后 Servlet 中得到這個(gè) User 對(duì)象再獲取其 authority 屬性值,注入 session 中。。。這個(gè)怎么想都覺得是業(yè)務(wù)邏輯啊?。≡趺茨茏?Servlet 來處理呢?。?
就頭大,望有前輩能解答一下,謝謝!

回答
編輯回答
挽歌

一直看你在強(qiáng)調(diào)業(yè)務(wù)邏輯,自己怎么方便怎么來才是最重要的,沒必要嚴(yán)格遵守那些規(guī)范.

2017年8月28日 08:49
編輯回答
呆萌傻

代碼分層的目的是讓你邏輯更清晰,不是強(qiáng)制的割裂,這是一種代碼組織方式。

實(shí)際中,service 層要處理最復(fù)雜的業(yè)務(wù)本來就是處理輸入輸出的,必然牽扯到 通過 request,response 獲取和輸出數(shù)據(jù)。

如果讓你在service層看起來更獨(dú)立一點(diǎn),你完全可以把 request和response的能力做一個(gè)封裝,作為當(dāng)前上下文的輸入輸出接口實(shí)現(xiàn),而不是直接操作它們

servlet 是一種程序語言提供的原生手段,不是代碼組織方式。 你把代碼分層和 servlet 做對(duì)比,本身就是不合適的。 servlet 為java的web開發(fā)提供了非常方便的封裝(不然你還得自己實(shí)現(xiàn)http協(xié)議), 你如果閱讀了解主流框架,spring mvc之類的, 并不是脫離servlet,只是把 request和response的能力做一個(gè)封裝 當(dāng)然還有一些CI的事情。

2018年7月4日 15:45