首页 > 编程语言 >【博学谷学习记录】超强总结,用心分享|狂野架构常见编程规约

【博学谷学习记录】超强总结,用心分享|狂野架构常见编程规约

时间:2022-12-18 15:44:57浏览次数:47  
标签:return 规约 狂野 编程 public static 2.2 日志 2.1

编程规约

方法参数类型必须一致,不要出现自动装箱拆箱操作
2.1.1.1 反例

这种操作很容易产生难以排查的NPE异常

/**
  * 反例
  * 容易出现空指针异常,如果参数为null就会拆箱失败空指针错误
  * 排查的时候很难排查,因为直接看代码看起来不会出现空指针的。
  * @param value
  * @return
  */
public static int handel(Integer value) {
    return value;
}
2.1.1.2 正例

入参以及出参,和参数传递类型是一致的

public static Integer handel(Integer value) {
    return value;
}
2.1.2 SimpleDateFormat是线程不安全的

SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static, 必须加锁,或者使用 DateUtils 工具类

2.1.2.1 反例

使用这种方式在多线程的情况下会报错,或者出现数据不一致的情况

private static final SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2.1.2.2 正例

使用ThreadLocal的方式保证线程安全,或者使用DateTimeFormatter代替SimpleDateFormat

private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>() {
    @Override
    protected SimpleDateFormat initialValue() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }
};
2.1.3 使用equals方法应该注意空指针
2.1.3.1 反例

如果object为null就会抛出NPE异常

object.equals("test");
2.1.3.2 正例

应该使用常量或者确定的值来进行判断equals

"test".equals(object);

或者使用Objects.equals

 Objects.equals(object1,object2)

2.2 异常日志

2.2.1 事务场景中如果异常被被捕获要注意回滚
2.2.1.1 反例
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
    @Override
    public void save(User user) {
        try{
        //some code
        //db operation
        }catche(Exception e){
            
        }
    }
}   
2.2.1.2 正例
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
    @Override
    public void save(User user) {
        try{
        //some code
        //db operation
        }catche(Exception e){
            //捕获处理后需要再将异常抛出
            throw  e;
        }
    }
}   
2.2.2 不要在 finally 块中使用 return

try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存 在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。

2.2.2.1 反例

这种情况下结果永远返回的都是true,fanally中不要做返回操作

public static boolean getValue(String text) {
    try {
        return text.equals("123");
    } finally {
        return true;
    }
}
2.2.2.2 正例
public static boolean getValue(String text) {
    return "123".equals(text);
}
2.2.3 应用中不可直接使用日志系统(Log4j、Logback)中的 API

在Java生态体系中,围绕着日志,有很多成熟的解决方案,关于日志输出,主要有两类工具。

​ 一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等,另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。

​ 所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。

​ 这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本,这也是门面模式所带来的好处。

​ 请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。

2.2.4 所有日志文件至少保存15天

​ 所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点,网络运行状态、安全相关信息、系统监测、管理后台操作、用户敏感操作需要留存相关的网络日志不少于6个月

标签:return,规约,狂野,编程,public,static,2.2,日志,2.1
From: https://www.cnblogs.com/xieshier/p/16990452.html

相关文章