我的一些小工具类库分享

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

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

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

主要包含:json

DapperWrapper  app

ServiceClient  异步


DapperWrapper

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

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

背景:优化

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

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

为了知足依赖倒置原则以及为了让代码更具测试性,因此在参考了别人的作法后也本身封装了一个

为何要本身封装而不直接用别人家的呢?

由于当时我这有须要使用单语句多查询(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

相关文章
相关标签/搜索