在我正在使用的系统中,有一个核心用户表。还有角色指定各种用户类型和应用程序级别访问。
为了保持用户表的简洁,会有许多表(或者可能只有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类。
答案 0 :(得分:0)
我到达的解决方案与我最初的想法完全不同,因此会将其记录在此作为存档目的。
我构建了一个表单管理器,允许添加字段和多选字段(根据用户配置显示为选择列表,复选框列表等。)
我允许将表单与角色相关联,并在多个表单中共享字段,而不是复制数据。
这使我可以简单地根据角色提取表格:
var form = formManager.Fetch(User.Username, Role.Name);
循环遍历表单元素以生成用户配置文件页面上所需的字段,表单管理器用于保存更新的数据。