zoukankan      html  css  js  c++  java
  • 个人一些小工具类库分享

    分享一下个人弄的几个小工具类库

    github地址 https://github.com/virtualcca/FoundationLibrary 

    这几个小类库都在我司各大主要系统里长期运作,效果良好。

    主要包含:

    DapperWrapper 

    ServiceClient 


    DapperWrapper

    作用:基于Dapper的实例类封装(用于配合依赖注入等使用Dapper)

    参考对象:https://github.com/alterius/DapperWrapper

    背景:

    首先Dapper是个很优秀的微型ORM,但它是基于扩展DbConnection来实现的,对于想遵循依赖倒置原则的来说这是不符合要求的。

    而且扩展方法(其实就是静态方法)也使得代码变得不可测试。

    为了满足依赖倒置原则以及为了让代码更具测试性,所以在参考了别人的做法后也自己封装了一个

    为什么要自己封装而不直接用别人家的呢?

    因为当时我这有需要使用单语句多查询(QueryMultiple),但它那个没有,而且觉得这些还是自己封装的话可控度高点,就自己造了个轮子。


    ServiceClient

    作用:基于HttpClient的封装用于发送Http请求

    参考对象:无

    背景:

    首先HttpClient本身也是个足够简单的类了,但是还是略有几点让我动了造轮子的想法

    ①HttpClient没有接口实现不满足我“万事万物均基于接口”的原则

    ②HttpClient的某些固有缺陷使得其用法需要注意(参考 http://www.infoq.com/cn/news/2016/09/HttpClient

    ③发送Http请求的时候常规是Get方法参数都是QueryString,Post都是放Body,希望两者在方法调用的时候能够统一(让方法内自行处理将参数放Url里还是放Body里)

    ④因为现在公司内的请求都是基于Json交互,希望将序列化和反序列化也能一并处理掉

    基于以上想法就造了个ServiceClient

    常规入参就3个参数

    image

    url:请求的地址

    method:Http谓词,暂时支持Get/Post/Put/Patch/Delete

    requestObj:请求参数

    返回值有带泛型的和不带泛型的,带泛型的将会用Newtonsoft.Json将返回值反序列化为对应类型,不带泛型的直接将返回值作为string返回

    其中,Get/Delete会将requestObj里的类型转换为key-value的形式附加在url后面(QueryString),而另外几个HttpVerb则会将参数序列化后为Json字符串放到body里

    所有方法原始只有异步版本(Task)但通过扩展方法的形式提供了同步版本

    同时有参考https://www.newtonsoft.com/json/help/html/Performance.htm 的Json相关优化建议使用基于流的反序列化

    内部提供一个ExceptionLogger委托用于在请求错误的时候记录一些额外的错误信息(比如请求的是哪个Url出的错)

    经过配置的Json序列化设置(比如为空的值将不参与序列化降低传输流量)


    例子:

    image

    以Get的形式请求了Price/GetDistancePrice这个地址,同时将会自动将requestObj里的那些数据转为key-value所有最终发送的请求长得像是

    Get Price/GetDistancePrice?locationId=xx&dropoffLocationId=xx&cityName=xx&carType=xx

  • 相关阅读:
    python——实现三级菜单选择的功能(原创)
    Python之路购物车
    Python基础介绍
    python登陆接口编写
    Oculus Store游戏下载默认路径修改方法
    【转载】关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
    安装Appium
    ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程一(获取第三方平台access_token)
    C# 利用反射更改父类公开对象
    mysql 根据某个值叠加查询
  • 原文地址:https://www.cnblogs.com/leolaw/p/7956015.html
Copyright © 2011-2022 走看看