0

哪个构成更好的面向对象设计?

Class User { 
   id {get;set} 
}
Class Office { 
   id {get;set}  
   List<User> Managers(){  }//search for users, return list of them
}

或者这个

Class User { 
   id {get;set} 
   List<User> Managers(){ }//search for users, return list of them 
}
Class Office { 
   id {get;set}  
}
4

4 回答 4

3

第一个解决方案更好,因为User不/不应该知道如何Office工作以及如何获取经理列表。

于 2009-05-11T16:09:46.493 回答
2
User john;
List<User> managers = fred.Managers(); //get managers of this user

Office london;
List<User> managers = london.Managers(); //get managers of this office

除非它是一个静态方法,否则让它成为你有一个实例的类的方法:让 getUsers 成为 User 类的非静态方法没有意义,因为那样你就需要一个用户实例来调用 getUsers方法。

于 2009-05-11T16:11:03.527 回答
2

与其他答案类似,我更喜欢第一个解决方案。毕竟,一个用户与正在搜索的集合有什么关系?客户首先如何获得要搜索的用户?

于 2009-05-11T16:11:31.123 回答
1

我个人喜欢第一个。用户是一个实体而不是一个集合。办公室是包含经理的办公室。

我可能还会创建一个 UserList 类。

public class UserList : List<User>
{}

class User 
{ 
  public int id {get; set;} 
  public bool IsManager { get; set;}
}

class Office {
    private UserList _users;
    UserList Managers
    {
        get { return (UserList) _users.FindAll(x => x.IsManager);}
    }
}
于 2009-05-11T16:08:45.433 回答