【重构的故事】(一):在哪里封装验证方法?

故事背景

  组长让我修改一个很简单的bug——在用户使用API添加地址的时候,后台验证一下地址信息。比如:地址名称,国家名称,街道名称不能为空……
之前是在API的Controller中写了一部分验证逻辑的,因为没有写全面,导致了bug的产生。

解决方案

  1. 办法:直接在API的Controller中的validate方法中修改。

    【优点】:直接,快速,可以很快把bug修改完。
    【缺点】:添加地址的入口不止一个,在我们的项目中除了通过API的方式添加,还有Upload方式添加,以及通过Portal添加。既然,该功能入口不止一个,那么他们都需要在添加时进行验证。如果以这种方式改,其他地方只能Copy,如果再加入其他的验证规则,这三处都得改。

  2. 办法:将validate方法写到contactService接口中,并在contactServiceImpl类中编写实现。

    【优点】:只维护一份,便于修改和维护。
    【缺点】:在contactService大多是和Contact的查询,添加,删除,修改有关的方法,好像验证方法放这里不太合适,而且ContactService中的方法的第一个参数必须加@DataCenterId注解,和分布式有关,而验证方法并不需要。

  3. 方法:将validate方法写到Contact中。

    【优点】:因为validate方法都是对contact中的各个字段进行验证,这样更符合面向对象和单一职责原则。
    【缺点】:但是因为Contact是POJO对象,直接在contact中加一个validate的验证方法不合适,而且在验证过程中,可能会调用其他类的其他方法,所以直接这样写,肯定是不行的。在我困惑应该怎么写的时候,发现了Hibernate-validator框架。它可以直接配置验证规则在xml中,既满足了封装,又易于修改。

总结

这里用一个经典的话来回答题目中的问题:

绝大多数情况下,函数应该放在它所使用的数据的所属对象内。
            ——《重构—改善既有代码的设计》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值