第一次接口开发

时间:2017/8/9-15;郑州;报警接口实现。

由于java仅仅入门,并且开发设计经验不足,导致简单的项目也要花费大量的时间去堆积,但是收获还是很大的。

组织上给的任务很适合新手,而且善于引导,乐于助人。

接口的目的:统一的报警接口,实现邮件与短信通知。

遇到的困难:

spring-boot工程不会创建   安装完spring-boot相关插件后配置maven工程,新建maven工程。

不懂设计模式,看不懂多层次的包结构,和控制反转这些词的含义。

完全没有设计方法,浑水摸鱼。

经过两天的学习,终于把工程看懂了一点。大致又了解了eclipse的操作。

学习EA,画出类图,刚开始类图完全不会。就一个接口,然后一次次扩展。最终类图还是很简洁的。


经过抽取和封装终于看着有点像样了。对于spring-boot的开发架构有了一点了解,然后开始写代码。

刚开始是模仿前人的工程,先写出接口,最先的接口有sengWarning,sendMail,sendSMG,方法。

 public boolean sendWarning(Warning warning) throws Exception{
        transmit(getReceiver(warning.getTo()), warning.getTitle(), warning.getContent());
        return true;
    }

用了两个私有方法处理对象。然后对收件人进行处理,分割字符,为了简化操作,一开始是把to做成邮箱号码混合接受的字符串,再利用二维数组分割成邮件和短信两种,再用for循环每次发送一封信息。

这样做就是完全的没有设计模式的代码,几乎所有的代码都在接口实现类中实现,于是问人,大佬帮忙指出问题:收件人处理不实用,可以加个属性type来区分,方法的返回值最好别不要用二维数组(最好不要用,占地方),统一接口的报警应该有统一的返回值,所有的公共方法都应该加参数判断(这是因为只要是公共方法就有可能被调用)。

于是添加属性type;对type进行判断,区分功能;返回对象依旧不会处理,大佬指导,如果最终返回值是数组,就要反思是不是可以批量处理,于是找到,javamail是支持传入sring数组作为收件人信息的。而httpClient短信接口也有相应的配置,但是数据部分没有string数组的传送方法,想了很久,用for循环虽然可以做到发送,但是明显不是同步的,不能知道单个是否成功。后来终于通过查看源码,发现to是一个可以以“,”分割的多值输入。

对于多个对象的处理,首先应该想:是否存在批量的处理方法。没有批量的方法就要看属性是否支持多对象组合,如果都没有就自己建批量方法。

方法可以申请为静态,这是为了节省每次方法调用,但是有些对象要在方法中创建,这是防止修改静态对象被多线程干扰。

结果的返回值最好是封装成一个对象,这样有利于错误信息的查找。

对于所有公共方法,都要判断两次 :1、对象为空    2、值为空  最好采用

        if(null == warning){
            return new Result(false, "参数不合法", 1001);
        }
        //StringUtils.isBlank("");
        if (null ==warning.getTo()|| "".equals(warning.getTo().trim())) {
            return new Result(false, "收件人为空", 1002);
        }
这样不会报空指针错误。

后面导师看代码,指出几个问题:fianl变量与静态变量定义重复,导致两个文件过耦合,最好删除一个;邮件与短信的返回值接受对象以及方法都具有共同点,可以抽取出抽象类,类中对象的初始化最好放在类中,不要定义在config类中。


最终总结一下就是:接口要简洁,实现要分离,公共部分抽取,输入/返回值最好定义成对象,还有什么控制反转、面向切面还需要继续学习。

最后又学习了一下测试工具postman和jmeter,json的书写格式{“”:“”,“”:“”}

注意事项: 配置文件中字符串不要加“”

post对象不能静态

非空判断很重要

异常申明用结果类代替

按多个字符分割spit("[,;]")

最后上代码

@Service
public class WarningServiceImpl implements WarningService {
    
    private MSGUtil msgUtil;
 
    /*信息发送入口
     * warning 报警信息 boolean[] 按序返回结果
     */
    @Override
    public Result sendWarning(Warning warning) {

        /*
         * 判断对象为空?
         */
        if (null == warning) {
            return new Result(false, WarningReport.WARNINGFAILD);
        }

        /*
         * 判断type :mail--邮件;msg--短信
         */
        if ("mail".equals(warning.getType())) {
            
        /*
         * 邮件类对象调用
         */
            msgUtil = new MailUtil(); 
        } else if ("msg".equals(warning.getType())) {

        /*
         * 短信类对象调用
         */
            msgUtil = new SMSUtil();
        } else {
            
            /*
             * 邮件格式错误
             */
            return new Result(false, WarningReport.FORMATERROR);
        }
            
            return msgUtil.getMSG(warning.getTo()
                    , warning.getTitle(), warning.getContent());
    }
}
好了,终于完成第一篇了。希望开个好头。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值