基金买入多重校验之设计模式应用

github项目下载地址

情景描述:

在基金的买入(认购、申购、定投)中,会有很多前置业务校验,例如:基金状态、业务状态、最小限额、最大限额等等十多个校验,认申定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();
		}
	}
}

测试结果:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值