使用Xamarin.Forms的企业应用程序模式(电子书)--配置管理

简介: 设置允许将配置应用程序行为的数据与代码分离,允许在不重新构建应用程序的情况下更改行为。有两种类型的设置:应用设置和用户设置。 应用设置是应用程序创建和管理的数据。它可以包括固定Web服务端点,API密钥和运行时状态等数据。

设置允许将配置应用程序行为的数据与代码分离,允许在不重新构建应用程序的情况下更改行为。有两种类型的设置:应用设置和用户设置。

应用设置是应用程序创建和管理的数据。它可以包括固定Web服务端点,API密钥和运行时状态等数据。应用设置与应用的存在有关,只对该应用有意义。

用户设置是影响应用行为的应用的可自定义设置,不需要频繁的重新调整。例如,应用程序可能会让用户指定从哪里检索数据,以及如何在屏幕上显示数据。

Xamarin.Forms包含可用于存储设置数据的持久字典。可以使用Application.Current.Properties属性访问此字典,并且在应用进入睡眠状态时保存放入其中的任何数据,并在应用程序恢复或重新启动时恢复。此外,Application类还具有一个SavePropertiesAsync方法,允许应用程序在需要时保存其设置。有关此字典的更多信息,请参阅Xamarin开发人员中心的属性字典

使用Xamarin.Forms持久性字典存储数据的缺点是它不容易被数据绑定。因此,eShopOnContainers手机应用程序使用可从NuGet获取的Xam.Plugins.Settings库。在使用每个平台提供的本地设置管理的同时,该库提供一致的,类型安全的跨平台方法,用于持久化和检索应用程序和用户设置。此外,使用数据绑定访问库公开的设置数据是直接的。

注意:虽然Xam.Plugin.Settings库可以存储应用程序和用户设置,但两者之间没有区别。

创建一个设置类

当使用Xam.Plugins.Settings库时,应创建一个静态类,该类将包含应用程序所需的应用程序和用户设置。 以下代码示例显示了eShopOnContainers移动应用程序中的Settings类:


点击(此处)折叠或打开

  1. public static class Settings
  2. {
  3.     private static ISettings AppSettings
  4.     {
  5.         get
  6.         {
  7.             return CrossSettings.Current;
  8.         }
  9.     }
  10.     ...
  11. }


可以通过由Xam.Plugins.Settings库提供的ISettings API读取和写入设置。 该库提供了一个可用于访问API的单例,CrossSettings.Current,应用程序的设置类应通过ISettings属性公开此单例。

注意:使用Plugin.Settings和Plugin.Settings.Abstractions命名空间的指令应该添加到需要访问Xam.Plugins.Settings库类型的类中。

添加设置

每个设置由一个键,一个默认值和一个属性组成。 以下代码示例显示了用于设置eShopOnContainers移动应用程序连接到的在线服务的基本URL的用户设置的所有三个项目:


点击(此处)折叠或打开

  1. public static class Settings
  2. {
  3.     ...
  4.     private const string IdUrlBase = "url_base";
  5.     private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
  6.     ...

  7.     public static string UrlBase
  8.     {
  9.         get
  10.         {
  11.             return AppSettings.GetValueOrDefaultstring>(IdUrlBase, UrlBaseDefault);
  12.         }
  13.         set
  14.         {
  15.             AppSettings.AddOrUpdateValuestring>(IdUrlBase, value);
  16.         }
  17.     }
  18. }


键始终是定义键名称的常量字符串,设置的默认值是所需类型的静态可读值。 如果检索到未设置的设置,则提供默认值可确保有效值可用。

UrlBase static属性使用ISettings API中的两个方法来读取或写入设置值。 ISettings.GetValueOrDefault方法用于从平台特定的存储中检索设置的值。 如果没有为该设置定义值,则会检索其默认值。 类似地,ISettings.AddOrUpdateValue方法用于将设置的值持续到平台特定的存储。

而是在Settings类中定义默认值,UrlBaseDefault字符串从GlobalSetting类获取其值。 以下代码示例显示了此类中的BaseEndpoint属性和UpdateEndpoint方法:


点击(此处)折叠或打开

  1. public class GlobalSetting
  2. {
  3.     ...
  4.     public string BaseEndpoint
  5.     {
  6.         get { return _baseEndpoint; }
  7.         set
  8.         {
  9.             _baseEndpoint = value;
  10.             UpdateEndpoint(_baseEndpoint);
  11.         }
  12.     }
  13.     ...

  14.     private void UpdateEndpoint(string baseEndpoint)
  15.     {
  16.         RegisterWebsite = string.Format("{0}:5105/Account/Register", baseEndpoint);
  17.         CatalogEndpoint = string.Format("{0}:5101", baseEndpoint);
  18.         OrdersEndpoint = string.Format("{0}:5102", baseEndpoint);
  19.         BasketEndpoint = string.Format("{0}:5103", baseEndpoint);
  20.         IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint);
  21.         UserInfoEndpoint = string.Format("{0}:5105/connect/userinfo", baseEndpoint);
  22.         TokenEndpoint = string.Format("{0}:5105/connect/token", baseEndpoint);
  23.         LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);
  24.         IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);
  25.         LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);
  26.     }
  27. }


每次设置BaseEndpoint属性时,都会调用UpdateEndpoint方法。 此方法更新一系列属性,所有这些属性都基于由“设置”类提供的UrlBase用户设置,这些设置表示eShopOnContainers移动应用程序连接到的不同端点。

数据绑定到用户设置

eShopOnContainers手机应用程序中,SettingsView显示两个用户设置。 这些设置允许配置应用程序是否从部署为Docker容器的微服务中检索数据,还是应用程序是否应从不需要Internet连接的模拟服务中检索数据。 当选择从容器化的微服务检索数据时,必须指定微服务器的基本端点URL。 图7-1显示了用户选择从容器式微服务检索数据时的SettingsView。

 

7-1eShopOnContainers手机应用程序公开的用户设置

数据绑定可用于检索和设置Settings类公开的设置。 这是通过对视图绑定的控件实现的,该视图绑定到查看模型属性,反过来访问“设置”类中的属性,并且如果设置值已更改则提高属性已更改的通知。 有关eShopOnContainers移动应用程序如何构建视图模型并将其与视图关联的信息,请参阅使用视图模型定位器自动创建视图模型

以下代码示例显示了来自SettingsView的Entry控件,允许用户输入集装式微服务的基本端点URL:

点击(此处)折叠或打开

  1. Entry Text="{Binding Endpoint, Mode=TwoWay}" />


Entry控件使用双向绑定绑定到SettingsViewModel类的Endpoint属性。 以下代码示例显示了Endpoint属性:


点击(此处)折叠或打开

  1. public string Endpoint
  2. {
  3.     get { return _endpoint; }
  4.     set
  5.     {
  6.         _endpoint = value;

  7.         if(!string.IsNullOrEmpty(_endpoint))
  8.         {
  9.             UpdateEndpoint(_endpoint);
  10.         }

  11.         RaisePropertyChanged(() => Endpoint);
  12.     }
  13. }


Endpoint属性被设置时,调用UpdateEndpoint方法,前提是提供的值是有效的,并且引发了属性更改的通知。 以下代码示例显示UpdateEndpoint方法:


点击(此处)折叠或打开

  1. private void UpdateEndpoint(string endpoint)
  2. {
  3.     Settings.UrlBase = endpoint;
  4. }


此方法使用用户输入的基本端点URL值更新Settings类中的UrlBase属性,从而使其保持平台特定的存储。

SettingsView导航到,SettingsViewModel类中的InitializeAsync方法被执行。 以下代码示例显示了此方法:


点击(此处)折叠或打开

  1. public override Task InitializeAsync(object navigationData)
  2. {
  3.     ...
  4.     Endpoint = Settings.UrlBase;
  5.     ...
  6. }


该方法将Endpoint属性设置为Settings类中UrlBase属性的值。 访问UrlBase属性会导致Xam.Plugins.Settings库从平台特定的存储中检索设置值。 有关如何调用InitializeAsync方法的信息,请参阅在导航期间传递参数

该机制确保每当用户导航到SettingsView时,将从平台特定的存储中检索用户设置,并通过数据绑定进行呈现。 然后,如果用户更改设置值,数据绑定将确保它们立即保留回平台特定的存储。

概要

设置允许将配置应用程序行为的数据与代码分离,允许在不重新构建应用程序的情况下更改行为。 应用程序设置是应用程序创建和管理的数据,用户设置是影响应用程序行为的应用程序的可自定义设置,不需要频繁重新调整。

Xam.Plugins.Settings库提供一致的,类型安全的跨平台方法,用于持久化和检索应用程序和用户设置,数据绑定可用于访问使用库创建的设置。

目录
相关文章
|
前端开发 .NET 测试技术
使用Xamarin.Forms开发企业应用程序
与企业应用开发人员多年合作,我们知道他们面临着几个挑战,其中包括: 随着时间的推移,需求不断变化 新的商机和挑战 在开发期间持续的反馈可能会显着影响应用程序的范围和要求 考虑到这一点,重要的是构建既灵活又可随时间轻松修改或扩展的应用程序。
1114 0
|
测试技术 Android开发 iOS开发
使用Xamarin.Forms的企业应用程序模式(电子书)--介绍
无论平台如何,企业应用开发人员都面临着几个挑战: 随时间变化的应用程序要求。 新的商机和挑战。 开发期间持续的反馈可能会显着影响应用程序的范围和要求。
1462 0
|
前端开发 测试技术
使用Xamarin.Forms的企业应用程序模式(电子书)--单元测试
移动应用程序具有独特的问题,桌面和基于Web的应用程序不必担心。移动用户将因其使用的设备,网络连接,服务可用性以及一系列其他因素而有所不同。因此,应该测试移动应用程序,因为它们将被用于现实世界,以提高其质量,可靠性和性能。
977 0
|
Web App开发 存储 缓存
使用Xamarin.Forms的企业应用程序模式(电子书)--访问远程数据
许多现代的基于Web的解决方案利用由Web服务器托管的Web服务来为远程客户端应用程序提供功能。 Web服务公开的操作构成Web API。 客户端应用程序应该能够在不知道API暴露的数据或操作如何实现的情况下使用Web API。
1301 0
|
Web App开发 存储 .NET
使用Xamarin.Forms的企业应用程序模式(电子书)--认证和授权
身份验证是从用户获取身份验证凭证(例如姓名和密码)以及根据权限验证这些凭据的过程。如果凭据有效,则提交凭据的实体被认为是认证身份。一旦身份被认证,授权过程将确定该身份是否可以访问给定的资源。
1438 0
|
存储 消息中间件 Docker
使用Xamarin.Forms的企业应用程序模式(电子书)--容器化微服务
开发客户端 - 服务器应用程序的重点是建立在每个层中使用特定技术的分层应用程序。这样的应用通常被称为单片应用,并且被封装在用于峰值负载预分配的硬件上。这种开发方法的主要缺点是每个层级组件之间的紧密耦合,各个组件不能轻易缩放,并且测试成本。
1020 0
使用Xamarin.Forms的企业应用程序模式(电子书)--验证
任何接受用户输入的应用程序都应确保输入有效。 例如,应用程序可以检查仅包含特定范围内的字符的输入,具有一定长度,或匹配特定格式。 没有验证,用户可以提供导致应用失败的数据。 验证强制执行业务规则,并防止攻击者注入恶意数据。
909 0
使用Xamarin.Forms的企业应用程序模式(电子书)--松散耦合部件之间的通信
发布订阅模式是一种消息传递模式,其中发布者发送消息而不知道任何接收者(称为订阅者)。 类似地,订阅者听取特定的消息,而不了解任何发布者。 .NET中的事件实现了发布 - 订阅模式,并且是不需要松散耦合的组件之间的通信层的最简单和直接的方法,例如控件和包含它的页面。
1107 0
|
容器
使用Xamarin.Forms的企业应用程序模式(电子书)--依赖注入
通常,在实例化对象时调用类构造函数,并将对象需要的任何值作为参数传递给构造函数。 这是依赖注入的一个例子,具体称为构造函数注入。 对象需要的依赖项被注入到构造函数中。 通过将依赖项指定为接口类型,依赖注入可以使具体类型与依赖于这些类型的代码进行解耦。
1010 0
在Xamarin.Forms企业应用程序中进行验证
我们在五月份发布了一本《使用Xamarin.Forms的企业应用程序模式》的电子书。电子书专注于开发Xamarin.Forms更容易测试,维护和发展的企业应用程序的核心模式和架构指导。
1142 0

热门文章

最新文章