/************************************************************************************************** |
§案例场景:
1、交易订单有诸多分类,且每种类都有各自的附加业务规则与逻辑:
所以在保存订单时,我们往往会附加不同业务处理,以填充业务订单实体。
eg: 计算积分规则、业务类型、额外扩展信息处理
另外,在根据不同业务类型,获取订单扩展信息时,也需要额外附加职责。
2、参数校验
参数校验通常体现在提供服务的接口上,不同的接口、不同的业务类型会存在不同的参数、业务校验规则,抑或是横向、纵向扩展,这里是一个变化点。
§分析设计:
以上两类问题通常有个基本点,就是他们的事务处理大部分逻辑会有共性的表现,而后则是不同行为的修饰与扩展。
§设计实现:
1、 设计类图
2、 代码实现
订单修饰:
DepositOrderInfo orderInfo = new DepositOrderInfo(); //订单主体 IOrders orders = new MainOrder(); //修饰 orders = new ShopOrderDecorator(orders); //根据业务类型取得不同修饰对象 InterfaceFactory factory = new InterfaceFactory(); factory.PayChannel = payInfo.PayChannel; orders = factory.OrderDecoratorInstance(orders); //修饰 orders = new MerchantOrderDecorator(orders); orders.FillOrderInfo(orderInfo, payInfo);
参数解析修饰:
IParameters parameters = new ParameterService(); //单层修饰 parameters = new ShopParameter(parameters); ShopParameterInfo payInfo = parameters.AnalyzeParameter<ShopParameterInfo>(requestInfo); //...... //校验参数 int returnCode = parameters.ValidateParameter(payInfo); if (returnCode != Consts.Success) { return GetResponse(returnCode); }
3、主要示例代码
§总结:
案例实现简单,没有多层修饰的行为,但是当存在多层修饰时,可以根据不同的业务类型与渠道,定义不同的修饰路径,完成多层修饰。