Xamarin.Forms 设计模式

写在前面:

刚过去的一年里从 Xamarin.Native 逐步转向到了 Xamarin.Forms 的开发上,一年的时间里赶着做项目,针对不同的功能以及 UI效果 查找并使用了一些第三方的 plugin,在之前的博客中更多的也是分享 Plugin、SDK、Features 相关的内容,今年的第一篇博客想针对我在实际项目中使用到的一些设计模式以及框架来总结分析一下。
注意事项:我是从一个移动应用程序的开发人员的角度出发的,在这里没有开发出任何新的模式,更多的是如何将它们用于 Xamarin Forms 的实际开发中的。

概述

在我们实际开发一个项目时,总会有一些给定的架构和项目设置,首先我们假设这些东西都没有被使用,之后说到的模式都基于以下设置:

  1. MVVM 设计模式 (Xamarin.Forms中采用的就是MVVM)
  2. 使用 .NET Standard (以前的 PCL) 作为代码共享模式. 这里 Shared Project 不推荐使用。
  3. 三层结构 —— Model(数据结构模型) / Vies(视图页面) / ViewModel (业务逻辑处理)

Xamarin.Forms 中的 MVVM

Xamarin.Forms 从最开始设计的时候就使用了 MVVM 这种设计模式,并使用这种设计模式构建了大部分的功能块。例如:在进行 UI搭建 的时候,Xamarin.Forms 给我们提供了 XAML 这样的布局方式,在 XAML 中我们通常会使用 Binding 的方式,将页面上的控件的一些属性或者方法拿到 ViewModel 中来,其中这种 Binding 的方式就是MVVM 设计模式的体现。

但是对于真正使用这种设计模式进行开发时候,其实还是有一些设计思想以及方法的。对于 MVVMMVC 在结构分层上基本一致—— M(Model), V(View), ViewModel(Controller),同时对于 Xamarin.Forms 中我们在 MVVM 这三层架构的基础上添加两层结构—— Repository ( Api 或 本地数据库 ), Service( 使用 repositories ),通过这两层结构我们能很好将数据交互这部分的操作抽象分离出来,同时对于数据这部分可以单独进行单元测试。

同时在 MVVM 中的 Model 可以保持状态和操作,这里 Model 不代表数据库中的数据结构模型,也不等于 API 返回的数据结构类型,其本质代表这我们的业务逻辑,而 ViewModel 就是作为中介进行这样一个转换的过程。

Xamarin.Forms 设计模式

Service

Service 作为服务器和 App 的桥梁,其最核心的作用就是数据传递。举一个最简单的例子:太多数的 App 都支持离线操作,但是这需要本地的数据存储与API返回的服务器的内容保持同步,当 App 响应用户对于数据的操作并完成整个过程后, App 本身时不会去关心同步数据,但这却是Service 在其中跟服务器数据库进行传递的结果。

Xamarin.Forms 设计模式

代理模式

Xamarin.Forms 中我们除了使用 MVVM 对代码进行分层之外,通常还会使用代理模式来进行解耦。通过在项目中创建一个接口以及相应的实现类,然后提供相应的依赖关系后后将其连接起来。例如,我创建了一个接口 INavigationService 并实现了 PushPop 两个方法,而这个结构的实现类 NavigationService 接受 Xamarin.Forms.NavigationPage 作为构造函数参数,然后实现相应的功能。同时这个接口我们同样可以在其它项目中进行使用,以达到分离依赖关系的目的。

Xamarin.Forms 设计模式

操作分离

ViewModels 通常包含用户交互的操作,这些操作的处理中需要包含从连接超时的处理、参数错误和服务器错误的处理,并提醒用户发生了什么,通常这段代码会变得繁重,同时也包括 try / catch 内部对于连接超时的真实操作,可能还有更多。使用分离操作这种思想后,分别提供各种情况下所需的操作,然后选择返回是否导航或向用户显示某些内容的结果。由于操作是完全独立的,同时还可以分开进行测试。

Xamarin.Forms 设计模式

好处

在Xamarin.Forms中使用MVVM这种设计模式,能很好的将UI与我们的业务逻辑进行分层,对于整个开发、测试以及后期维护上来说都能提供很大的帮助:

  • 业务逻辑和用户界面之间的清晰分离将使应用程序更易于测试,维护和发展。
  • 数据绑定和命令绑定提供了将 UI 连接到 View Model 的方法。
  • 方便开发人员设计工作流程。当 UI XAML 不与代码隐藏紧密结合时,设计人员可以独立工作。
  • 增加了应用程序的可测性,将 UI逻辑 移动到可独立于 UI技术 进行实例化的单独类中,使得 UITest 变得更加容易。将业务逻辑在单独的类中进行实现,使得 UNitTest 变得更加直接。

到这里Xamarin.Forms 中使用的一些设计模式和思想就完成了,希望能对您有所帮助。

原文出处:简书【Funky_Xamarin】

原文链接:https://www.jianshu.com/p/1cfb85184e8c

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论