Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象搜索器方法应该在父对象中,还是与被搜索的对象相同?_C#_Oop_Coupling - Fatal编程技术网

C# 对象搜索器方法应该在父对象中,还是与被搜索的对象相同?

C# 对象搜索器方法应该在父对象中,还是与被搜索的对象相同?,c#,oop,coupling,C#,Oop,Coupling,哪些是更好的面向对象设计 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, retu

哪些是更好的面向对象设计

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}  
}

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

我可能还会创建一个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);}
    }
}

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

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设置为用户类的非静态方法毫无意义,因为这样您就需要一个用户实例来调用getUsers方法。

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