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