В моем текущем проекте почти все мои бизнес-объекты домена имеют как минимум два конструктора. (1) принимает идентификатор для этого объекта, чтобы он мог самостоятельно создавать, извлекая данные из самой базы данных.Другой конструктор (2) принимает объект данных, необходимый для функционирования этого объекта домена.Таким образом, я могу загружать или лениво, в зависимости от того, что лучше в данный момент.
Итак, если кто-то вызывает свойство Department вашего бизнес-объекта Employee, свойство может проверить, было ли оно уже.Если нет, вы можете получить DepartmentID из данных сотрудника, создать экземпляр отдела и (сохранить, если и) вернуть его.Таким образом, легко получить любые доменные объекты, которые вам нужны.
Но вы все равно хотите иметь возможность быстрой загрузки.Допустим, у вас есть бизнес-объект Department со свойством Employees, которое возвращает List(Of Employee)
.Свойство Employees будет напрямую получать данные из базы данных и создавать экземпляры каждого Employee с помощью конструктора data .Таким образом, у вас будут свои классные бизнес-объекты Employee, 80 из них, но с одним запросом данных.
А затем, чтобы поднять его на ступеньку выше, ваши объекты могут принимать многослойные данные.Например, вы можете создать Employee с сущностью Employee из DAL, которая также включает данные для отдела, супервизора и т. Д. Конструктор «ID» также может получить эти данные с самого начала.
В конце концов, вам придется принять решение о том, что предварительно загружать и что лениво загружать.Например, возможно, в 90% случаев, когда вы создаете сотрудника, вам также нужны данные отдела.Тогда вы можете просто получить данные Отдела, когда создаете сотрудника с помощью конструктора EmployeeID.Но, скажем, данные супервизора используются только в 8% случаев.Вы могли бы решить всегда лениво загружать это.