Как реализовать ленивую загрузку в контексте трех уровней? Я понимаю базовую архитектуру уровня представления, бизнес-уровня и уровня данных:
У вас есть базовые «тупые» классы, которые являются почти зеркальными изображениями таблиц в базе данных за одним исключением. Вместо идентификаторов внешнего ключа у вас есть ссылка на фактический экземпляр (ы) того, на что ссылаются. Например: Сотрудник со свойствами Name / DOB / Title.
Затем для каждого из этих классов у вас есть класс, который обеспечивает операции CRUD над ним плюс любые пользовательские подпрограммы хранения данных, которые вам могут понадобиться (вызов хранимой процедуры, которая работает с этим объектом и т. Д.). Этот класс будет заменен, если вы изменили базу данных. Например: EmployeeDAL.Save (myEmployee), EmployeeDAL.Get (myEmployee) (где myEmployee имеет свой идентификатор, но ничего больше)
У вас есть классы бизнес-уровня, которые выполняют проверку, а что нет. Методы в этих классах обычно заканчиваются вызовом DAL для сохранения информации или ее получения. Это меняется, когда клиент меняет свое мнение о том, что представляет собой действительные / недействительные данные, или хочет изменить способ выполнения какого-либо вычисления.
Уровень представления взаимодействует с бизнес-уровнем для отображения объектов и передачи вставок / обновлений, сделанных в пользовательском интерфейсе, на нижние уровни. Например: он просматривает список сотрудников и отображает их в таблице HTML.
Но где именно будет идти код для отложенной загрузки ссылок? Если на уровне представления есть объект Company, который он только что отобразил, и начинается процесс отображения myCompany.Employees, как это достигается? myCompany является экземпляром одного из тупых классов, которые зеркально отражают таблицы базы данных, и не должен знать о том, как что-либо получить.
Делаете ли вы в качестве ответа на этот вопрос и предлагаете создать фиктивную версию каждого объекта? Тогда объект уровня DAL может иметь переменные, указывающие, загружены ли сотрудники или нет, и вызывать DALEmployee.GetEmployees (this)? Я чувствую, как будто я упускаю что-то решающее в шаблоне ...