用户配置文件服务使用动态
本文关键字:动态 服务 配置文件 用户 | 更新日期: 2023-09-27 17:49:46
在我正在工作的系统中有一个核心用户表。还有指定各种用户类型和应用程序级别访问权限的角色。
为了保持用户表的简洁,将有许多表(或者可能只有一个表)保存每个用户类型Profile所需的额外字段。
与其用许多方法返回每个Profile类型,不如从ProfileService返回一个ExpandoObject会有什么问题吗?这将允许一个简单的FetchProfile(foo userType)
函数。
例句:
public ExpandoObject FetchProfile(UserType userType)
{
dynamic x = new ExpandoObject();
switch(stuff)
{
case UserType .Type1:
//The ExpandoObject will be pulled from DB using Dapper.Net
return x;
case UserType .Type2:
//The ExpandoObject will be pulled from DB using Dapper.Net
return x;
default:
return null;
}
}
这个ProfileService将在框架的多个级别(n层)中使用。
这样做有什么问题吗?或者对每个概要文件类型使用单个类,或者使用泛型提取所需的概要文件类,这样会更好吗?
public T FetchProfile<T>(UserType userType) where T : IProfileObject ...
ExpandoObject的优点是可以这样构建数据库:当站点处于活动状态时可以添加新的ProfileTypes,而无需添加额外的ProfileType类。
我得到的解决方案与我最初的想法大不相同,因此将其记录在这里以供存档。
我建立了一个表单管理器,它允许添加字段和多选择字段(根据用户配置显示为选择列表,复选框列表等)
我允许表单与角色相关联,多个表单之间共享字段,以避免重复数据。
这允许我简单地根据角色拉出一个表单:
var form = formManager.Fetch(User.Username, Role.Name);
并循环遍历表单元素以生成用户配置文件页面所需的字段,表单管理器用于保存更新的数据。