buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

这两个重载方法,你怎么重构?

先看看下面SmsUtil类里的这两个重载方法

@ConfigurationProperties(prefix = "sms.config")
@Setter
public class SmsUtil {
    @Autowired
    private PlatformConfig platformConfig;
    
    private String smsUrl;
    
    /**
     * 发送短信
     *
     * @param phone 手机号
     * @param msg   信息内容
     * @return 处理的信息
     */
    public String sendSMS(String phone, String msg) {
        StringBuilder sbParam = new StringBuilder();
        StringBuilder url = new StringBuilder();

        if (StringUtils.isBlank(phone)) {
            return "手机号不能为空!";
        }

        if (StringUtils.isBlank(msg)) {
            return "发送的信息内容不能为空!";
        }

        if (!msg.contains(platformConfig.getSmsSignature())) {
            msg = platformConfig.getSmsSignature() + msg;
        }

        try {
            sbParam.append("?account=").append(platformConfig.getSmsAccount());
            sbParam.append("&pwd=").append(URLEncoder.encode(platformConfig.getSmsKey(), "UTF-8")).append("&mphone=").append(phone).append("&content=")
                    .append(URLEncoder.encode(msg, "UTF-8"));
            url.append(smsUrl)
                    .append(sbParam.toString());
            Integer result = HttpClientUtils.requestByGetMethod(url.toString());
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("发送短信异常", e);
        }

        return "信息发送成功!";
    }

    /**
     * 发送短信
     * @param phone 手机号
     * @param msg 短信内容
     * @param userName 通道名称
     * @param passWord 通道密码
     * @return
     */
    public String sendSMS(String phone, String msg,String userName,String passWord) {
        StringBuilder sbParam = new StringBuilder();
        StringBuilder url = new StringBuilder();

        if (StringUtils.isBlank(phone)) {
            return "手机号不能为空!";
        }

        if (StringUtils.isBlank(msg)) {
            return "发送的信息内容不能为空!";
        }

        if (!msg.contains(platformConfig.getSmsSignature())) {
            msg = platformConfig.getSmsSignature() + msg;
        }

        try {
            sbParam.append("?account=").append(userName);
            sbParam.append("&pwd=").append(URLEncoder.encode(passWord, "UTF-8")).append("&mphone=").append(phone).append("&content=")
                    .append(URLEncoder.encode(msg, "UTF-8"));
            url.append(smsUrl)
                    .append(sbParam.toString());
            Integer result = HttpClientUtils.requestByGetMethod(url.toString());
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("发送短信异常", e);
        }

        return "信息发送成功!";
    }
}

 

我想你有一个想法跟我一样,重构方案如下↓↓↓↓

修改第一个sendSMS方法的方法体为:

    /**
     * 发送短信
     *
     * @param phone 手机号
     * @param msg   信息内容
     * @return 处理的信息
     */
    public String sendSMS(String phone, String msg) {
        return sendSMS(phone, msg, platformConfig.getSmsAccount(), platformConfig.getSmsKey());
    }

 

当然,还有其他的需要重构调整的地方。例如 passWord,程序员的英语水平,应该是password。

再有,再有什么呢?

 

posted on 2023-04-28 12:52  buguge  阅读(166)  评论(0编辑  收藏  举报