第一次接口开发

来源:互联网 发布:监控预警系统 java 编辑:程序博客网 时间:2024/06/06 03:29

时间: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("[,;]")

最后上代码

@Servicepublic 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());    }}
好了,终于完成第一篇了。希望开个好头。



原创粉丝点击