服务端接口定义另类方法
2008-05-26 12:14
375 查看
内部接口的定义与实现各有千秋,本文所提到的是这样的思路:通过内部通用的方法完成“路由”转发,这样做的好处,不言而喻:单点控制风险、通用逻辑校验、流量控制……等等。
直接上代码:
接口调用时,根据需要可以自行执行解析器、指定验证器等。
直接上代码:
public class MerchantPayment : IMerchantPayment { #region IPaymentClient 成员 /// <summary> /// 执行API请求 /// </summary> /// <typeparam name="T">领域对象</typeparam> /// <param name="request">具体的API请求</param> /// <param name="parser">自定义解析器</param> /// <returns>领域对象</returns> public T Execute<T>(IRequest request, IParser<T> parser) where T : IResponse { try { int RetCode = ToolUtils.CheckInvokeParameter(request); if (RetCode != Consts.Success) { return parser.Parse(RetCode); } InterfaceFactory factory = new InterfaceFactory(); factory.ApiName = request.GetApiName(); return factory.PaymentInstance.Payment<T>(request); } catch (System.Exception e) { LogHelper.Error(e); return parser.Parse(e.Message); } } public SinglePaymentResponse SingleAccount(SinglePaymentAccount request) { return this.Execute<SinglePaymentResponse>(request, new SinglePaymentParser()); } public SinglePaymentResponse SingleCard(SinglePaymentCard request) { return this.Execute<SinglePaymentResponse>(request, new SinglePaymentParser()); } public BatchPaymentResponse BatchPayment(BatchPaymentRequest request) { ((IApiNameChanger)request).SetName(Consts.ApiName.BatchAccountPay); return this.Execute<BatchPaymentResponse>(request, new BatchPaymentParser()); } public CheckPaymentResponse ValidatePayment(BatchPaymentRequest request) { ((IApiNameChanger)request).SetName(Consts.ApiName.BatchAccountCheck); return this.Execute<CheckPaymentResponse>(request, new CheckPaymentParser()); } #endregion } /// <summary> /// 服务类对象 /// </summary> public IPaymentService PaymentInstance { get { switch (ApiName) { case Consts.ApiName.SinglePay: return new SinglePaymentService(); case Consts.ApiName.BatchAccountPay: return new BatchPaymentService(); case Consts.ApiName.BatchAccountCheck: return new ValidateService(); } return new NullService(); } } /// <summary> /// 支付服务 /// </summary> public interface IPaymentService { /// <summary> /// 付款 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="request">请求对象</param> /// <returns></returns> T Payment<T>(IRequest request) where T : IResponse; } /// <summary> /// Summary description for SinglePaymentService /// </summary> public class SinglePaymentService : IPaymentService { #region IPaymentService 成员 public T Payment<T>(IRequest request) where T : IResponse { SinglePaymentResponse response = new SinglePaymentResponse(); //....... return response as T; } #endregion } public class ValidateService : IPaymentService { T IPaymentService.Payment<T>(IRequest request) { BatchPaymentRequest req = request as BatchPaymentRequest; //...... return GetResponse(Consts.Success) as T; } } /// <summary> /// Summary description for BatchPaymentService /// </summary> public class BatchPaymentService : IPaymentService { /// <summary> /// 批量付款 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="request"></param> /// <returns></returns> T Payment<T>(IRequest request) where T : IResponse { BatchPaymentRequest batch = request as BatchPaymentRequest; //....... return new BatchPaymentResponse { RetCode = Consts.Success, Message = "success" } as T; } } /// <summary> /// 默认服务, 异常兼容 /// </summary> public class NullService : IPaymentService { #region IPaymentService 成员 T IPaymentService.Payment<T>(IRequest request) { throw new NotImplementedException(); } #endregion }
接口调用时,根据需要可以自行执行解析器、指定验证器等。
相关文章推荐
- 适配远程接口调用的另类方法
- Spring Data自定义Repository接口方法定义规范
- hibernate——Session接口中定义的saveOrUpdate()方法浅析
- 14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记
- Java中接口的定义与实现接口抽象方法
- Java中接口定义及实现接口的抽象方法
- 编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; )编写Bird类和Fish类的测试程序,并调用其中的run()方法
- 编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; )编写Bird类和Fish类的测试程序,并调用其中的run()方法
- 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
- 第十九条:接口只用来定义方法
- 网络 客户端 多种方法 建立与服务端的连接 接口:服务器名,IP socket connect
- Android AIDL(接口定义语言)简单理解和基本使用方法
- Java中接口的定义与实现接口抽象方法
- 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
- /*1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法 */
- Java接口定义与实现方法分析
- Android AIDL(安卓接口定义语言)基本使用方法
- JavaDay08--Homework(定义接口和类并调用属性和方法+对象的多态性+打印对象+判定对象相等)
- 《C#入门经典》第六版 学习笔记之第十章 定义类成员(1) 10.3 接口的实现~10.5 部分类方法定义
- Android中定义接口的方法