使用动态的用户个人资料

时间:2014-03-12 12:39:28

标签: c# dynamic expandoobject

在我正在使用的系统中,有一个核心用户表。还有角色指定各种用户类型和应用程序级别访问。

为了保持用户表的简洁,会有许多表(或者可能只有1个表)保存每个用户类型配置文件所需的额外字段。

从ProfileService返回ExpandoObject会不会有很多方法返回每个Profile类型?这将允许一个简单的FetchProfile(foo userType)函数。

e.g:

    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层)。

这样做有什么问题吗?或者为每个配置文件类型使用单个类更好,也许使用泛型来提取所需的Profile类:

public T FetchProfile<T>(UserType userType) where T : IProfileObject ...

ExpandoObject的优点是可以构建数据库,以便在站点生效时添加新的ProfileType,而无需添加额外的ProfileType类。

1 个答案:

答案 0 :(得分:0)

我到达的解决方案与我最初的想法完全不同,因此会将其记录在此作为存档目的。

我构建了一个表单管理器,允许添加字段和多选字段(根据用户配置显示为选择列表,复选框列表等。)

我允许将表单与角色相关联,并在多个表单中共享字段,而不是复制数据。

这使我可以简单地根据角色提取表格:

var form = formManager.Fetch(User.Username, Role.Name);

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