PS:本篇講的是通用CRUD后端設計,主要是設計的想法,跟代碼不相關,故可跳過本篇直接看下一篇代碼實現。
在登錄功能實現之后,貓哥定睛一看,剩下的好像絕大部分工作都是CRUD。也就是對一些事物的增、刪、改、查。
比如人員管理功能,無非就是查看人員(查)、修改人員信息(改)、新增人員(增)、刪除人員(刪)。
而跟人員管理相關的網頁,其實有兩個就夠額,一個是userManage.jsp,提供人員列表和相關的修改、刪除、新增按鈕。然后是userUpdate.jsp,提供修改人員、新增人員并保存的界面。
那么整個問題,從邏輯上就抽取成了兩個問題,1個是頁面跳轉的問題,之前我們通過RouteCommand已經實現了,另一個就是增刪改查的問題,需要我們接受頁面參數之后判斷頁面請求的意圖(是新增、還是刪除),然后調用數據庫層的接口完成操作,最后跳轉到相應頁面即可。
有一種很簡單的做法,就是全部if判斷,對每一種操作定義一個Servlet,然后執行相關數據庫操作,然后跳轉相應頁面。
稍微復雜點的做法,就像我們之前的LoginServlet-LoginCommand 和 RouteServlet-RouteCommand一樣,負責一部分的功能:登錄、跳轉。
那么即然CRUD的工作都是類似的,那么能不能交給同樣的Servlet-Command模塊處理呢,貓哥嘗試之,并命名為ActionServlet-ActionCommand。
首先我們規范所有的跟CRUD請求相關的url寫法為/HomeworkSystem/AcitonServlet?method=XXX&entity=YYY&id=ZZZ
。具體規則如下:
OK,我們設計所有CRUD請求的實現邏輯如下(以人員管理為例):
1,查看點擊人員管理菜單,顯示人員列表和相應操作按鈕,請求為:/HomeworkSystem/AcitonServlet?method=view&entity=User處理為:request的Attribute里面添加人員列表變量entityList跳轉網頁為:userView.jsp,負責顯示人員列表(注意所有跳轉為內嵌跳轉,跳轉到的網頁顯示在index.jsp也右側內容區域)2,新增點擊新增,請求為:/HomeworkSystem/AcitonServlet?method=add&entity=User處理為:無跳轉網頁為:userUpdate.jsp3,信息修改點擊修改,請求為:/HomeworkSystem/AcitonServlet?method=edit&entity=User&id=123處理為:將id對應用戶信息放入request的Atrribute,名為entityEdit跳轉網頁為:userUpdate.jsp,需要加載待修改客戶信息4,保存新增/保存修改點擊保存,請求為:/HomeworkSystem/AcitonServlet?method=save&entity=User&id=123處理為:判斷id是否"",完成新增/修改的保存跳轉:直接調用1查看5,刪除點擊刪除,請求為:/HomeworkSystem/AcitonServlet?method=delete&entity=User&id=123處理為:刪除id對應用戶跳轉:直接調用1查看OK,其實基本原則就一條,即然我們所有的實體對應的數據庫表,都要完成CRUD操作,而且規則一致。根據計算機編程“避免重復”的原則,即可嘗試簡化之,如果在簡化的過程中有問題,說明當初的設計就是有問題的,需要修改以便簡化順利完成。所以貓哥認為,大可不必為了設計而設計,修改不自然的設計是學習如何完善設計的好辦法。
新聞熱點
疑難解答