會用與靈活的用好之間是妙之巔豪,失之千里。小細節大管理與大效率,管理沒有大小之分, 很小的細節管理可能會很大在個個方面提高效率,下降成本。本章節是鳥菜啊在多年開發中一直使用的規則。方法(藉口)行參與返回只用實體類java
說一個真實的故事 剛剛到一個新小組,在一次會議的時候。 鳥菜啊:之後全部的方法(接口)行參與返回只用實體類 老員工A說:這不是增長了不少工做量嗎? 新員工B說:是啊,很麻煩啊。 鳥菜啊:就這樣定了,先執行吧。 ..... 好久以後,老員工A去其餘小組了 某天 老員工A對其餘人說:方法(接口)行參與返回要用實體類 鳥差啊聽了哈哈大笑
第一階段 只須要經過用戶id查詢用戶信息sql
public class UserController{ public UserInfo getUserInfo(Long userId){ } }
第二階段需求 須要經過 userId 與 appId 獲得用戶json
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(Long userId ){ } @RequestMapping("newGetUserInfo") public UserInfo getUserInfo(Long userId , Long appId){ } }
若是使用實體類mybatis
第一階段 只須要經過用戶id查詢用戶信息架構
public class UserController{ public UserInfo getUserInfo(UserInfo userInfo){ } }
第二階段需求 須要經過 userId 與 appId 獲得用戶app
public class UserController{ public UserInfo getUserInfo(UserInfo userInfo){ } }
接口的定義與聲明根本就沒有發生變化,調試
public class UserController{ public UserInfo getUserInfo(Long userId){ } } public Implementation UserServer{ public UserInfo getUserInfo(Long userId); } public class UserServerImpl Implementation UserServer{ public UserInfo getUserInfo(Long userId); } public class UserDao{ public UserInfo getUserInfo(Long userId); }
當發生修改的時候code
public class UserController{ public UserInfo getUserInfo(Long userId , AppId appId){ userServer.getUserInfo( userId , appId); } } public Implementation UserServer{ public UserInfo getUserInfo(Long userId , AppId appId); } public class UserServerImpl Implementation UserServer{ public UserInfo getUserInfo(Long userId , AppId appId){ return userDao.getUserInfo( userId , appId) } } public class UserDao{ public UserInfo getUserInfo(Long userId , AppId appId); }
須要找到每一個接口與類,打開,修改.....調試等等操做。對象
若是使用對象,只須要修改sql語句就好了。這叫不變應萬變。接口
很差範例
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(Long userId ){ } @RequestMapping("newGetUserInfo") public UserInfo appIdAndUserIdGetUserInfo(Long userId , Long appId){ } @RequestMapping("newGetUserInfo") public UserInfo ageAndUserIdGetUserInfo(Long uId , Long age,){ } }
上面形參userId與uId實際上是一個意識,可是由於開發人員忽視或者由不一樣開發人員開發,每一個人的行爲習慣不同。操做形參命名不一樣,形成維護與溝通成本劇增。
好的範例
一個接口就能夠搞定了。由mybatis去識別下參數。
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(UserInfo userInfo ){ } }
很差範例
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(Long userId ){ } @RequestMapping("newGetUserInfo") public UserInfo appIdAndUserIdGetUserInfo(Long userId , Long appId){ } @RequestMapping("ageAndUserIdGetUserInfo") public UserInfo ageAndUserIdGetUserInfo(Long userId , Long age, Long appid){ } }
好的範例
無論加多少個接口或者多少個Controller,只要看到UserInfo對象。調用者基本知道這方法做用和行爲。不須要在去理解參數。
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(UserInfo userInfo ){ } @RequestMapping("newGetUserInfo") public UserInfo appIdAndUserIdGetUserInfo(UserInfo userInfo){ } @RequestMapping("ageAndUserIdGetUserInfo") public UserInfo ageAndUserIdGetUserInfo(UserInfo userInfo){ } ...... } public class UserLogController{ @RequestMapping("getUserInfo") public UserInfo getUserLog(UserInfo userInfo ){ } ...... }
實體與xxxInput和xxxOnput轉換
public class UserController{ @RequestMapping("getUserInfo") public UserInfo getUserInfo(UserInfoInput userInfoInput ){ UesrInfo userInfo = new UserInfo(); userInfo.setUid(userInfoInput.getUid()); userInfo.setName(userInfoInput.getName()); userInfo.setAge(userInfoInput.getAge()); userInfo.setAppId(userInfoInput.getAppId()); userInfo.setAddree(userInfoInput.getAddree()); // 進行一些業務操做 UesrInfoOuput userInfoOuput = new UesrInfoOuput(); userInfoOuput.setUid(userInfo.getUid()); userInfoOuput.setName(userInfo.getName()); userInfoOuput.setAge(userInfo.getAge()); userInfoOuput.setAppId(userInfo.getAppId()); userInfoOuput.setAddree(userInfo.getAddree()); } }
簡單就是美,管理與架構的本質是提升效率,而大量的數據對象轉換,從而大大的下降了效率。得不償失。