我正在设计用户角色管理系统。在该系统中,用户可以拥有许多角色,角色可以拥有许多用户。它是用户和角色之间的一对多关系。我正在考虑建立这种关系的设计:
Class User
{
List<Role>
}
Class Role
{
List<User>
}
我的问题是,这是一个糟糕的设计。如果是建议关系的推荐方式应该是什么。
此致
答案 0 :(得分:3)
我不理解以前对糟糕设计的任何指责。这是映射多对多关系的典型设计。特别是如果你使用Entity Framework,你会一直得到这样的关系。 你甚至可以自我引用,为什么不呢?
class Person
{
List<Person> Friends;
}
答案 1 :(得分:2)
在子对象和父对象的上下文中执行此操作并不是那么糟糕或不常见。
Class User
{
List<Role> Children;
}
Class Role
{
List<User> Parents;
}
这样你总能知道从父母到孩子的联系。
一个例子是.NET Framework中的XMLNode类。
它有ChildNodes和ParentNode属性。
答案 2 :(得分:1)
是的,我会考虑这个糟糕的设计,因为现在你有两个要维护的列表,假设这甚至可以编译交叉引用。
你或者更好地创建一个连接对象,其他东西包含一个列表(一个既有用户又有角色的类)。
或者只选择最有意义的那个,然后在需要查找具有特定角色的所有用户时应用一些查询。即
myListOfUsers.Where(user => user.Roles.Contains(something));