版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangsweet1991/article/details/83753867
情景描述:
在基金的买入(认购、申购、定投)中,会有很多前置业务校验,例如:基金状态、业务状态、最小限额、最大限额等等十多个校验,认申定3种买入操作中大多数校验是共用的,也有一部分是独有的,这些校验之间方法中存在相互依赖关系。如果把这些校验封装成公共方法一一调用,代码即繁琐且不易维护,运用设计模式进行解耦大大提高代码可阅读性。
创建接口
public interface Validator<T extends PurchaseDTO> {
public void check(T t) throws Exception;
}
创建标记接口
public interface Buy020Validator extends Validator {
}
public interface Buy022Validatorextends Validator {
}
public interface Buy039Validator extends Validator {
}
创建公用抽象类
public abstract class PurchaseVaildatorBase {
@Autowired
protected ClientService clientService;
private ClientInfoDTO clientInfoDTO;
protected ClientInfoDTO getClientInfo(PurchaseDTO purchaseDTO) {
if (clientInfoDTO != null) {
return clientInfoDTO;
}
// TODO 根据clientid获取ClientInfoDTO
String clientid = purchaseDTO.getClientid();
clientInfoDTO = clientService.queryClientById(clientid);
return clientInfoDTO;
}
}
创建具体校验类
@Component
@Order(1)
@Scope("prototype")
public class BanckCardValidator extends PurchaseVaildatorBase implements Buy020Validator, Buy039Validator {
@Override
public void check(PurchaseDTO purchaseDTO) throws Exception {
// TODO Auto-generated method stub
System.out.println("BanckCardValidator");
}
}
@Component
@Order(2)
@Scope("prototype")
public class AmountValidator extends PurchaseVaildatorBase implements Buy020Validator, Buy022Validator, Buy039Validator {
@Override
public void check(PurchaseDTO purchaseDTO) throws Exception {
// TODO Auto-generated method stub
ClientInfoDTO clientInfo = getClientInfo(purchaseDTO);
System.out.println("AmountValidator:"+new Gson().toJson(clientInfo));
}
}
@Component
@Order(3)
@Scope("prototype")
public class BusinessCodeValidator extends PurchaseVaildatorBase implements Buy020Validator, Buy022Validator {
@Override
public void check(PurchaseDTO purchaseDTO) throws Exception {
// TODO Auto-generated method stub
System.out.println("BusinessCodeValidator");
}
}
@Component
@Order(4)
@Scope("prototype")
public class TaValidator extends PurchaseVaildatorBase implements Buy020Validator, Buy022Validator, Buy039Validator {
@Override
public void check(PurchaseDTO purchaseDTO) throws Exception {
// TODO Auto-generated method stub
ClientInfoDTO clientInfo = getClientInfo(purchaseDTO);
System.out.println("TaValidator:"+new Gson().toJson(clientInfo));
}
}
具体结构如下:
测试类如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MainApplication.class)
public class AppTest {
@Autowired
private BuyService buyService;
@Test
public void fun1() {
try {
PurchaseDTO purchaseDTO = new PurchaseDTO();
purchaseDTO.setBusinessCode("020");
purchaseDTO.setBankAccount("12312312");
purchaseDTO.setClientid("1234567890");
Respones respones = buyService.purchase(purchaseDTO);
System.out.println(new Gson().toJson(respones));
} catch (Exception e) {
e.printStackTrace();
}
}
}