Locale locale, MessageSource messageSource) {
Map<String, Object> data = new HashMap<String, Object>();
try {
String name = (String) params.get(“name”);
String value = (String) params.get(“value”);
//示例代码,省略其他代码
}
catch (Exception e) {
logger.error(“add config error”, e);
data.put(“code”, 99);
data.put(“msg”, messageSource.getMessage(“SYSTEMERROR”, null, locale));
}
return data;
}
3 有明确的输入输出和方法名
尽量有清晰的输入输出参数,使人一看就知道函数做了啥。举例:
public void updateUser(Map<String, Object> params){
long userId = (Long) params.get(“id”);
String nickname = (String) params.get(“nickname”);
}
上面的函数,看函数定义你只知道更新了用户对象,但你不知道更新了用户的什么信息。建议写成下面这样:
public void updateUserNickName(long userId, String nickname){
}
你就算不看方法名,只看参数就能知道这个函数只更新了nickname一个字段。多好啊!
这点只可意会不可言传。
4 把可能变化的地方封装成函数
编写函数的总体指导思想是抽象和封装,你要把代码的逻辑抽象出来封装成为一个函数,以应对将来可能的变化。以后代码逻辑有变更的时候,单独修改和测试这个函数即可。
这一点相当重要,否则你会觉得怎么需求老变?改代码烦死了。
如何识别可能变的地方,多思考一下就知道了,工作久了就知道了。比如,开发初期,业务说只有管理员才可以删除某个对象,你就应该考虑到后面可能除了管理员,其他角色也可能可以删除,或者说对象的创建者也可以删除,这就是将来潜在的变化,你写代码的时候就要埋下伏笔,把是否能删除做成一个函数。后面需求变更的时候,你就只需要改一个函数。
举例,删除配置项的逻辑,判断一下只有是自己创建的配置项才可以删除,一开始代码是这样的:
/**
- 删除配置项
*/
@Override
public boolean delete(long id) {
Config config = configs.get(id);
if(config == null){
return false;
}
// 只有自己创建的可以删除
if (UserUtil.getUser().equals(config.getCreator())) {
return configs.remove(id) != null;
}
return false;
}
这里我会识别一下,是否可以删除这个地方就有可能会变化,很有可能以后管理员就可以删除任何人的,那么这里就抽 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 成一个函数:
/**
- 删除配置项
*/
@Override
public boolean delete(long id) {
Config config = configs.get(id);
if(config == null){
return false;
}
// 判断是否可以删除
if (canDelete(config)) {
return configs.remove(id) != null;