鍍金池/ 問答/Java  PHP  C/ web框架中的controller、service層、dao層、logic層的聯(lián)

web框架中的controller、service層、dao層、logic層的聯(lián)系與作用啊

一直不太理解controller、service層、dao層、logic層這幾個(gè)概念,以及具體如何用、為何這樣用

回答
編輯回答
陌離殤

說下個(gè)人目前在用的分布

Controller:接受Web請(qǐng)求,分發(fā)調(diào)用不同的邏輯或服務(wù)完成一項(xiàng)事情,返回?cái)?shù)據(jù)
service:做些服務(wù)Api接口相關(guān)的代碼
dao:和數(shù)據(jù)庫打交道(對(duì)表進(jìn)行增刪改查)
logic:自己的業(yè)務(wù)邏輯相關(guān)

現(xiàn)在有個(gè)PC注冊(cè)賬號(hào)的功能
  1:初始階段,controller收到請(qǐng)求,直接在controler里面寫數(shù)據(jù)庫連接,進(jìn)行增刪改查,沒毛病,可以運(yùn)行。
  2:慢慢發(fā)展,功能多了,Controller多起來了,contoller到處都是sql和數(shù)據(jù)庫打交道的代碼,雖然不影響運(yùn)行,但是有時(shí)候發(fā)現(xiàn),如果我要修改一個(gè)數(shù)據(jù)表的字段或其他東西,得到好幾個(gè)Controller里面去找相同的一個(gè)代碼并修改,太麻煩了,干脆都放到一個(gè)里面,全部對(duì)增刪改查從同一個(gè)地方多好,這時(shí)候出現(xiàn)了dao層。
  3:繼續(xù)發(fā)展,進(jìn)軍移動(dòng)端,有了手機(jī)注冊(cè)的功能,簡(jiǎn)單,寫唄,寫著寫著發(fā)現(xiàn),我去,怎么和PC注冊(cè)功能這么像?都要校驗(yàn)用戶信息->判斷數(shù)據(jù)庫有無重復(fù)->插入數(shù)據(jù)庫(重復(fù)的業(yè)務(wù)功能在幾個(gè)控制器都要被重復(fù)使用),有了第二步的經(jīng)驗(yàn),把這些相同的業(yè)務(wù)操作抽離放到一起唄,出現(xiàn)了logic層(logic層負(fù)責(zé)做些處理并調(diào)用dao層完成數(shù)據(jù)的入庫等和數(shù)據(jù)庫打交道的事情),RegisterLogic,規(guī)定所有的注冊(cè)功能都走這一個(gè)邏輯了,維護(hù)更加方便了,以后即使增加一百種注冊(cè)方式,只要 new RegisterLogic()->register();就行了。
  4:繼續(xù)發(fā)展下去,公司有聲有色的,老板說,網(wǎng)站太無聊了,加點(diǎn)天氣預(yù)報(bào),隨機(jī)推送笑話的附屬功能吧,這行功能不屬于自己的系統(tǒng)的業(yè)務(wù)邏輯,更具第二步和第三步的經(jīng)驗(yàn),應(yīng)該單獨(dú)放一個(gè)地方,沒準(zhǔn)以后其他的地方會(huì)用到,這時(shí)候service層就出現(xiàn)了。
  
2017年4月26日 13:38