Должен ли метод поискового объекта находиться в родительском объекте или совпадать с поиском beign объекта? - PullRequest
0 голосов
/ 11 мая 2009

Что представляет собой лучший объектно-ориентированный дизайн?

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 ]

3 голосов
/ 11 мая 2009

Первое решение лучше, потому что User не знает / не должен знать, как работает Office и как получить список менеджеров.

2 голосов
/ 11 мая 2009

Как и другие ответы, я предпочитаю первое решение. В конце концов, какое отношение имеет один пользователь к поисковой коллекции? Как клиент может получить пользователя для поиска в первую очередь?

2 голосов
/ 11 мая 2009
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.

1 голос
/ 11 мая 2009

Мне лично нравится первый. Пользователь - это сущность, а не коллекция. Офис - тот, который содержит Менеджеров.

Возможно, я бы также создал класс 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);}
    }
}
...