1. 江湖人士首页
  2. IT江湖
  3. 猿在江湖

JHRS开发框架之第三方类库选型,3个主要库介绍

JHRS开发框架之第三方类库选型,这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。

第三方类库选型

在刚开始搭建这个框架的时候,由于之前并没有WPF的开发经验,也不知道选用的这些第三方组件是否合理,但通过几天的试用和实战做一些业务功能,感觉还是挺方便的,可以节省很多的代码;在这个框架中,使用了最为主要的三个框架,分别是Prism、AspectInjector、Refit。

JHRS开发框架之第三方类库选型

Prism类库的应用

Prism可以用于在WPF和Xamarin.Forms中构建松耦合,可维护和可测试的XAML应用程序的框架。每个平台都有单独的版本,Prism提供了一组设计模式的实现,这些模式有助于编写结构良好且可维护的XAML应用程序,包括MVVM,依赖项注入,命令,EventAggregator等。

因此在开发WPF程序和基于Xamarin.Forms开发App程序都是可以使用这个Prism框架的,这个框架最开始就是来自微软,现在已经交给开源社区维护,以前就在很多公司在使用,现在可以更加放心使用它来构建MVVM程序。

在开始使用Prism之前,最好花两三个小时看下Prism系列相关文章,如果之前就熟悉MVVM这种开发模式,学习和应用起来是非常的快的。

Prism开源地址:https://github.com/PrismLibrary/Prism

Prism系列相关文章

  1. .NET 5 WPF MVVM框架之Prism数据绑定
  2. .NET 5 WPF MVVM框架之Prism命令
  3. .NET 5 WPF MVVM框架Prism模块化
  4. .NET 5 WPF MVVM框架Prism事件聚合器
  5. .NET 5 WPF MVVM框架Prism区域管理器
  6. .NET 5 WPF MVVM框架Prism导航系统
  7. .NET 5 WPF MVVM框架Prism对话框服务

AspectInjector框架的应用

AspectInjector是面向切面(AOP)的基于属性的一个框架,用于创建和注入切面(injecting aspects)到 .net 程序集。我们知道使用AOP 可以把原来多行且重复的面向过程的代码进行重构,使核心代码只聚焦于原本它自己的功能或业务,这样使代码的【可读性】和【维护性】提高,从而减少重复代码。

AspectInjector开源地址:https://github.com/pamidur/aspect-injector

在开发WPF客户端的时候,有很多按钮需要调用web api来获取数据,或者做保存操作时需要调用web api接口将数据提交到远程服务器,而在执行这个按钮的事件代码中,可能包含了一些其它的功能,例如,点击某个按钮后需要在界面上显示一个转圈圈的效果(或者Loading效果),如下图所示。

jhrs-loading

当操作执行完毕后(数据加载完毕),这个转圈圈的效果消失掉,呈现结果给用户看;看似一个简单的功能,如果不加以封装的话,如果整个系统有2000处需要应用此效果的地方,则代码量开发时就需要复制2000遍了,封装了之后,则可以让相关的处理逻辑只关注于自己应该做的事情了,如下示例代码所示:

        /// <summary>
        /// 通用更改狀態方法
        /// </summary>
        /// <typeparam name="TEntity">待更改狀態實體</typeparam>
        /// <param name="entity">當前對象</param>
        [WaitComplete]
        protected override async Task<object> UpdateDataStatus<TEntity>(TEntity entity)
        {
            if (!IsDevelopment)
            {
                var model = entity as ReservationOutputDto;
                var response = await RestService.For<IReservationApi>(AuthClient).ChangeStatus(model.Id, model.Status);
                AlertPopup(response.Message, response.Succeeded ? MessageType.Success : MessageType.Error, async (d) =>
                {
                    if (response.Succeeded) await BindPagingData();
                });
                return response.Succeeded;
            }
            return null;
        }

如上代码使用方式一样,只需要在对应的方法上标记一个【WaitComplete】特性即可。在实际的项目中,您还可以根据需要编写更多的AOP类来减少重复的代码。

在框架中如何使用的可以参见这里。

Refit库拿来做什么

Refit是一个类型安全的 REST 开源库,是一套基于 RESTful 架构的 .NET 客户端实现,内部使用 HttpClient 类封装,可通过 Refit 更加简单安全地访问 Web API 接口,要使用 Refit 框架,只需要在项目中通过 NuGet 包安装器安装即可。

简单的说,Refit就是用来更加优雅的请求web api的开源库。

Refit Github地址:https://github.com/reactiveui/refit

Refit依赖的接口

Refit最终是要通过RestService类来调用相关的接口,而这个接口是和web api相对应的,来自github上的示例接口如下:

public interface IGitHubApi
{
        [Get("/users/{user}")]
        Task<User> GetUser(string user);
}

而在框架中,提供了根据swagger解析生成该接口的一个工具,生成的接口如下:

        /// <summary>
	/// 登錄接口
	/// </summary>
	[Headers("User-Agent: JHRS-WPF-Client")]
	public interface ILoginApi
	{
		/// <summary>
		/// 用戶登錄
		/// </summary>
		/// <param name="dto"></param>
		/// <returns></returns>
		[Post("/api/Login/Login")]
		Task<OperationResult<UserContext>> Login(LoginDto dto);

		/// <summary>
		/// 退出
		/// </summary>
		/// <returns></returns>
		[Post("/api/Login/Logout")]
		Task<OperationResult> Logout();
	}

框架中是如何使用的

当你在项目中引用了Refit来请求web api接口时,需要你在本地项目中定义和web api对应的接口,而该接口可以使用框架提供的工具来生成。

在上方提供的接口中的每个方法上面标记了一个【Post】特性,如果你查看源码,可以看到其标记的特性与REST一致的,【Post】、【Get】、【Put】、【Delete】、【Patch】等。

调用方式如下:

var response = await RestService.For<IReservationApi>(AuthClient).GetPageingData(request);

在框架中,使用类RestService的静态泛型方法For来调用即可;另外AuthClient这是一个登当后拿到token之后的一个HttpClient对象,因为在后续的接口中,访问 web api是需要身份认证的。AuthClient对象是在登录成功后,设置了AuthenticationHeaderValue对象的HttpClient对象,具体参考这里。

写在最后

介绍完了在搭建WPF开发框架中应用的三大框架或者库之后,下一篇将介绍一下WPF调用Web API封装是怎样一步一步重构成现在的这个样子。

本系列相关阅读

  1. WPF企业级开发框架搭建指南(启示录)
  2. JHRS开发框架之基础类库
  3. JHRS开发框架之第三方框架选型
  4. JHRS开发框架之WPF调用Web API封装
  5. JHRS开发框架之客户端入口项目
  6. JHRS开发框架之各子系统如何整合
  7. JHRS开发框架之怎样设计合理的ViewModel基类
  8. JHRS开发框架之公用组件用户控件的封装
  9. JHRS开发框架之建议遵循的一些建目录文件原则
  10. JHRS开发框架之WPF数据验证
  11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
  12. JHRS开发框架之踩坑记(终章)
本站最新优惠

Namesilo优惠:新用户省 $1 域名注册-优惠码:45D%UYTcxYuCloZ 国外最便宜域名!点击了解更多

特别优惠:免费赠送 $100 Vultr主机-限时优惠!英文站必备海外服务器!点击了解更多

VPS优惠:搬瓦工优惠码:BWH3OGRI2BMW 最高省5.83%打开外面世界的一款主机点击了解更多

本文来自投稿作者:IT菜鸟,不代表江湖人士立场,如若转载,请注明出处:https://jhrs.com/2020/37953.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 20 =