拥有一个结构,其中一个类包含另一个类的列表,反之亦然,这是一个糟糕的设计

时间:2015-03-23 07:31:12

标签: c# design-patterns

我正在设计用户角色管理系统。在该系统中,用户可以拥有许多角色,角色可以拥有许多用户。它是用户和角色之间的一对多关系。我正在考虑建立这种关系的设计:

Class User
{

  List<Role>
}

Class Role
{
List<User>
}

我的问题是,这是一个糟糕的设计。如果是建议关系的推荐方式应该是什么。

此致

3 个答案:

答案 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));