博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编码习惯之参数校验和国际化规范
阅读量:5829 次
发布时间:2019-06-18

本文共 2960 字,大约阅读时间需要 9 分钟。

hot3.png

今天我们说说参数校验和国际化,这些代码没有什么技术含量,却大量充斥在业务代码上,很可能业务代码只有几行,参数校验代码却有十几行,非常影响代码阅读,所以很有必要把这块的代码量减下去。

今天的目的主要是把之前例子里面的和业务无关的国际化参数隐藏掉,以及如何封装好校验函数。

今天累,少说话多贴代码,先看对比图,修改前:

service:

修改后:

service:

Controll的非业务代码如何去掉参考,下面说说去掉Local参数。

强调一下:业务代码里面不要出现和业务无关的东西,如local,MessageSource 。

去掉国际化参数还是使用的技术还是ThreadLocal。国际化信息可以放好几个地方,但建议不要放在每一个url上,除了比较low还容易出很多其他问题。这里演示的是放在cookie上面的例子:

UserUtil:

public class UserUtil {  private final static ThreadLocal
tlUser = new ThreadLocal
(); private final static ThreadLocal
tlLocale = new ThreadLocal
() { protected Locale initialValue() { // 语言的默认值 return Locale.CHINESE; }; }; public static final String KEY_LANG = "lang"; public static final String KEY_USER = "user"; public static void setUser(String userid) { tlUser.set(userid); // 把用户信息放到log4j MDC.put(KEY_USER, userid); } public static String getUser() { return tlUser.get(); } public static void setLocale(String locale) { setLocale(new Locale(locale)); } public static void setLocale(Locale locale) { tlLocale.set(locale); } public static Locale getLocale() { return tlLocale.get(); } public static void clearAllUserInfo() { tlUser.remove(); tlLocale.remove(); MDC.remove(KEY_USER); }}

CheckUtil,这里需要得到用户的语言:

package plm.common.utils;import org.springframework.context.MessageSource;import plm.common.exceptions.CheckException;public class CheckUtil {  private static MessageSource resources;  public static void setResources(MessageSource resources) {    CheckUtil.resources = resources;  }  public static void check(boolean condition, String msgKey, Object... args) {    if (!condition) {      fail(msgKey, args);    }  }  public static void notEmpty(String str, String msgKey, Object... args) {    if (str == null || str.isEmpty()) {      fail(msgKey, args);    }  }  public static void notNull(Object obj, String msgKey, Object... args) {    if (obj == null) {      fail(msgKey, args);    }  }  private static void fail(String msgKey, Object... args) {    throw new CheckException(resources.getMessage(msgKey, args, UserUtil.getLocale()));  }}

这里有几个小技术点:

工具类里面使用spring的bean,使用了MethodInvokingFactoryBean的静态方法注入:

format
exceptions
windows

server里面调用的使用没有出现类名:

这里使用的jdk的import static 特性,可以在ide上配置,请自行google。

import static plm.common.utils.CheckUtil.*;

还有一小点注意,我建议参数非法的时候,把值打印出来,否则你又要浪费时间看是没有传呢还是传错了,时间就是这样一点点浪费的。

check(id > 0L, "id.error", id); // 当前非法的id也传入提示出去

另外有些项目用valid来校验,从我实际接触来看,用的不多,可能是有短木板吧。如果你的项目valid就能满足,那就更加好了,不需要看了。但是大部分场景,校验比例子复杂N多,提示也千变万化,所以我们还是自己调用函数校验。

做了这几步之后,代码会漂亮很多,记住,代码最主要的不是性能,而是可读性,有了可读性才有才维护性。而去掉无关的代码后的代码,和之前的代码对比一下,自己看吧。

还有人说代码要注释率到多少(我们公司有段时间工具扫描要求注释率到30%以上),依我看来,大部分业务代码这么简单,你把代码写成我例子那样,还需要什么注释?注释是画蛇添足。

转载于:https://my.oschina.net/niithub/blog/1923133

你可能感兴趣的文章
Linux 文件IO理解
查看>>
Ninject 2.x细说---2.绑定和作用域
查看>>
30个非常时尚的网页联系表单设计优秀示例
查看>>
使用membership(System.Web.Security)来进行角色与权限管理
查看>>
opticom 语音质量验证白皮书
查看>>
3D实时渲染中的BSP树和多边形剔除
查看>>
Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
查看>>
网络抓包的部署和工具Wireshark【图书节选】
查看>>
Redis在Windows+linux平台下的安装配置
查看>>
Maven入门实战笔记-11节[6]
查看>>
Local declaration of 'content' hides instance variable
查看>>
ASP.NET中 HTML标签总结及使用
查看>>
Linux下日志系统的设计
查看>>
爬虫IP被禁的简单解决方法——切换UserAgent
查看>>
php生成word,并下载
查看>>
紫书 习题8-11 UVa 1615 (区间选点问题)
查看>>
asp.net mvc学习(Vs技巧与Httpcontext)
查看>>
float数据在内存中是怎么存储的
查看>>
dedecms 修改标题长度可以修改数据库
查看>>
Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
查看>>