会用与灵活的用好之间是妙之巅豪,失之千里。小细节大管理与大效率,管理没有大小之分, 很小的细节管理可能会很大在个个方面提高效率,下降成本。本章节是鸟菜啊在多年开发中一直使用的规则。方法(借口)行参与返回只用实体类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()); } }
简单就是美,管理与架构的本质是提升效率,而大量的数据对象转换,从而大大的下降了效率。得不偿失。