ABP.ModuleZero.Feature——特性管理

原文地址:http://aspnetboilerplate.com/Pages/Documents/Feature-Management  (在翻译原文的基础上增补更多细节说明)

简介

在大多数SAAS系统中。都提供【版本】这个概念。不同的版本提供不同的功能特性。通过这种方式,一个SAAS系统可以提供不同的价格与功能组合给不同的租户。

例如【标准版】含有A/B/C三个功能,售价1000元;【旗舰版】包含A/B/C/D四个功能,售价2000元。

ABP内置了特性(功能)模块以简化此类功能开发。您可以定义各种特性(功能),检测某个指定特性(功能)是否对某个指定租户开放,或者根据后台设置的特性(功能)开放对应的页面或是生成对应的导航。

在一个SAAS系统中,使用不同功能版本的租户应该看到不同的导航菜单。例如在一个OA系统中,旗舰版的用户有人事管理、财务管理、行政管理、知识管理四个导航菜单。但标准版则没有知识管理这个导航菜单。即使用户通过在地址栏直接输入知识管理对应的url地址,系统也应该给与明确的错误提示:您的版本为开通此功能,如有需要,请联系...,而不应该不做任何验证直接使用该功能。在ABP的架构设计中,特性和版本是直接关联的,您可以通过检测当前用户所属的租户对应的版本是否开通了当前操作对应的功能以确定是否对用户开放当前操作。

补充:在ABP中,特性可以直接关联到具体的租户,也可以关联到具体的版本。举例:系统中一共有5个功能,标准版有1,2,3功能,旗舰版有1,2,3,4,5功能。现实情况中,有可能会出现客户因为价格原因,购买标准版,但是又对旗舰版的第五项功能迫切需要。此时可单独针对此租户开放1,2,3,5四个功能(具体实现代码后续在我们的OA中做详细演示)。

特性值仓库接口

特性功能通过使用IFeatureValueStore 接口来实现获取特性的值。您可以自己实现该接口,该接口的完整实现在Module Zero项目中。如果您没有在系统中手动实现该接口,系统默认会使用NullFeatureValueStore这个实现,在该实现中,所有获取特性的方法都返回Null值。

此处翻译起来很别扭,可能是我理解有误,没想明白作者为何要如此操作。

特性类型

系统中存在两种基本特性类型。

布尔特性类型

值为“true”或者“false”,此类型克用于设置针对某个版本或是某个租户开放或者关闭某个特性(功能)。

值特性类型

该类型可以存储任意类型的值。在系统中,存储或获取该值时,得到的是该值的文本形式。故,在实际使用中,需要进行类型转化。

举个例子:假如系统是一个任务管理系统,并且限制每个月可创建的任务数。想象一下,假如系统包含两个版本,标准版限制每月最多允许创建1000个任务,旗舰版限制每月最多允许创建5000个任务。此时,我们应该使用特性去存储1000与5000这两个值,而不应该简单存储true/false。

在实际使用中,如果一定只有两个版本且日后不会更改,用布尔值区分特性也是可以的,但是,假如系统有三个、四个、甚至五个版本时,布尔值就不够用了(布尔值最多允许两个值)。

注意:系统中存储的1000与5000是字符串格式的“1000“与“5000“,而不是具体的数字。

上一篇:react native 中时间选择插件


下一篇:C++头文件用<>还是“” 以及 要加.h还是不加 的问题