用户配置文件服务使用动态

本文关键字:动态 服务 配置文件 用户 | 更新日期: 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);

并循环遍历表单元素以生成用户配置文件页面所需的字段,表单管理器用于保存更新的数据。