MVC職責

 

 
1: dao層不該該有太多業務邏輯,好比,一個方法就只保存一個數據庫表操做. 對比了一下 JourneyDao 太多的業務處理了 
 
2: 面向對象儘可能仍是多用對象具體化,少使用hashmap,如今暫時分爲3層對象
   1:vo 專門負責 request對象
   2: model:  將接收進來的vo對象轉化 ,好比傳進來的是一些
    3:po  只跟數據庫有關係,且字段都跟數據要一致 ,沒有冗餘 
 
這麼作的緣由是:1:有時候咱們查詢的一些數據,到前臺的顯示都徹底不太一致, 因此就有了model和vo之間的轉換
                           2: model和po之間的轉換,是爲了避免污染數據操做層,好比dao寫業務邏輯.因此咱們的model能夠冗餘各類list對象 ,好比journey冗餘List<Address>
 
 
 
3:儘可能每一個接口都使用泛型,第一眼就能看出這個接口返回了什麼對象,而後也能夠點擊進去看.而不是map對象或者Object對象.好比行程接口,我必須返回
Journey對象,其餘的附屬對象List<Address>嵌套在對象裏面,而不是使用List嵌套hashmap.這個就徹底沒有可讀性而言了.對於開發來調用者來講.
就必須一個一個方法查找,找到對應的key,並且不能寫錯.
 
 
 
 
4:對於一個對象的新增.或者修改方法,不管多少個字段,在dao層只寫一個方法, 只是根據對象字段是否是爲空逐個去更新.而不是修改一個字段,新增一條sql,這樣寫的話,就會很難維護了.
 
5:對於數據庫查詢也是,若是單表查詢,應該也是dao只寫一個方法,只是傳輸不一樣的查詢對象Critetai進來,建議最好也仍是不要用hashmap,
 
因此對於單表操做,在業務不是很複雜的狀況下,大多數狀況下會是單表的增刪該查. 因此若是使用4和5的話,將會節約不少時間,和減小不少沒必要要的bug,並且也好維護
 
 
 
6:代碼中儘可能減小,if XX==null的判斷 和 list.size的判斷,因此咱們在查詢的時候 就返回一個size爲0的對象 .(由於NULL原本就是程序設計上的一個缺陷)
 
7:業務代碼中儘可能不要寫死代碼,最典型的就是類型,type=1 type=2 ,都應該改爲枚舉 .如今journey裏面有不少這樣的狀況,後續改進 
 
8:分頁組件也須要好好優化一下,  如今的分頁,必需要本身手動寫2條sql,一條查詢信息,一條查總數, 按照道理應該只寫一條就能夠了,另一條,只不過是吧* 該成count.
 
9:對於代碼中sql查詢出來的list,須要作model和po轉換的,最好不要寫在service裏面,一來顯得 代碼雜亂,二來很差公用 .
 
 
 
 
 
 
 
 
 
 
 
 
 
MVC的職責應該更加明確,各層的耦合度就越低,越低的話,可讀性高(都是一樣的一個套路來的),可維護性強(controller想換springmvc就Springmvc,想struts2就struts2,service想換dubbo就dubbo,想換probuf就換probuf,dao想換mybatis就換mybatis,想換hibernate就hibernate)
 
1:dao層只專一作某個數據庫的增刪改查 ,因此dao層,只傳入跟數據庫有關聯的po對象.這樣dao層的就不會顯得臃腫了,簡單的作一件事情,出錯的話,也就好排查問題,並且對於擴展就更加方便了,由於沒有跟業務代碼耦合
 因此dao只專一數據庫的增刪改查: 1:單表操做只傳入PO對象,對應一條sql語句
                                                        2:對於多表查詢,也只是傳入一個sql須要執行的參數對象。
 
2:service也只盡可能寫跟業務邏輯有關聯的一些操做,對於相似 po和model這類的轉換,雖然也是service應該作的,可是咱們仍是把它抽出來一個util,這樣service也不會顯得臃腫,並且util能夠複用.
   因此service只作幾件事情:1 接收controller的參數,進行一些參數合法驗證,儘早拋出異常
                                              2:執行一些業務邏輯以後,將controller傳過來的對象,轉換成爲dao層須要操做的po對象
                                              3:調用dao執行
 
 
3:對於controller層,咱們也不該該耦合一些業務流程,它只負責把數據拿出去顯示,因此,咱們接收到service返回的model對象.咱們惟一要作的就是,可能前端顯示的跟咱們返回的不同,好比性別service返回0 或者1
而前端要顯示男和女,這樣轉換就須要咱們去作了,
因此controller只作幾件事情: 1:接收前端傳過來的參數,進行一些字段的合法性驗證
                                               2: 操做權限等等的一些驗證,好比登錄權限 ,頻率控制等等
                                               3:接收service返回的對象,從新組裝試圖數據返回.
 
4:
相關文章
相關標籤/搜索