Объект зависит от другого объекта - когда загружать его свойства - PullRequest
0 голосов
/ 13 октября 2011

Представьте себе класс сотрудника:

public class Employee
 {
   public int ID { get; set; }
   public string FirstName { get; set; }
   public Employee(int ID, string FirstName)
       {
         this.ID = ID;
         this.FirstName = FirstName;
       }
 }

Данные для сотрудника загружаются из уровня доступа к данным (DAL), который является другим отдельным классом.

Позже я решучто мне нужно другое свойство, а именно отдел для сотрудника, однако отдел сам по себе является огромной категорией, поскольку у него есть свои собственные свойства.Итак, я в итоге создаю для него класс:

class Department
 {
  public string DepartmentID { get; set;}
  public string CostCenter { get; set; }
  public bool hasManager { get; set; }
  //more code
  //constructor for department
 }

Поэтому я изменяю свой класс сотрудников сверху, чтобы включить экземпляр отдела:

public class Employee {
  //existing code for an employee above PLUS the below
  public Department d { get; set; }
}

Так что теперь яХорошо, у меня есть класс сотрудников с отделом, связанным с ним.Когда я вызываю свой класс DAL, чтобы получить данные для своего сотрудника, это может вернуть фактический отдел в запросе SQL.Так что я могу легко присвоить DepartmentID класса отдела.Но когда / как мне следует назначить все другие свойства класса Department.

Кроме того, все свойства CostCenter, hasManager и т. Д. Хранятся в слое базы данных.Если я первоначально только возвращаю DepartmentID, должен ли я позвонить в класс DAL, чтобы получить всю необходимую информацию для отдела?Если так, то где я должен это называть, я не думал, что вызов класса DAL от моего конструктора отдела был хорошей идеей.Я знаю, что могу просто создать связь между моими двумя таблицами и получить соответствующую информацию из отдела, а затем я могу создать свой отдел в конструкторе сотрудников.Но у класса сотрудника есть МНОЖЕСТВО свойств, уже много полей возвращаются из базы данных, поэтому, если я сделаю это, мой конструктор может становиться все больше и больше ....

1 Ответ

1 голос
/ 13 октября 2011

Ну, у тебя есть выбор ...

Я полагаю, у вас есть собственный DAL, потому что EF и Linq2Sql имеют встроенные опции для этого.

  1. Стремительная загрузка - загрузите Отдел человеком.
  2. По запросу загрузка: if (p.d == null) ...
  3. Ленивая загрузка: сделать запрос по требованию в получателе свойства d.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...