Вызов геттера без присвоения ему чего-либо (ленивая загрузка) - PullRequest
2 голосов
/ 25 марта 2009

У меня есть DTO, который может быть загружен полностью или с отложенной загрузкой, используя Lazy Load Pattern. Как он загружается, зависит от того, что нужно приложению Flex. Однако этот DTO будет отправлен в приложение Flex (SWF). Обычно, например, коллекция будет загружаться только при вызове. В моем случае, однако, коллекция будет вызываться только во Flex, поэтому моя реализация на стороне .NET, очевидно, не будет работать в этом случае (кроме случаев, когда Flex выполнит серверный вызов ... чего я бы хотел избежать).

В получателе коллекции данные извлекаются из базы данных. Если бы я работал со страницами ASP.NET, он работал бы, но не при отправке DTO во Flex.

Как бы вы справились с этим? Я мог бы вызвать метод получения перед отправкой DTO во Flex, но это кажется ужасным ... + вызов метода получения может быть выполнен, только если он назначен чему-то (а локальная переменная, которая будет содержать коллекцию, никогда не будет использоваться ... ).

Ответы [ 2 ]

2 голосов
/ 25 марта 2009

Вы можете ввести метод для загрузки зависимостей - loadDependencies - который должен принимать всю ленивую загрузку для вашего объекта DTO перед отправкой по проводам (во Flex). Вы можете абстрагировать этот метод от интерфейса, чтобы упростить такой процесс в разных DTO. Нет ничего против использования геттеров, как вы описали это внутри этого метода.

1 голос
/ 25 марта 2009

Я бы, вероятно, ввел метод Finalize для класса и, возможно, метод расширения FinalizeAll для различных коллекций класса. Этот метод будет просто проходить и ссылаться на все методы получения в открытых свойствах класса, чтобы гарантировать, что они загружены. Вы бы вызвали Finalize (или FinalizeAll) перед отправкой объектов в приложение Flex. Возможно, вы даже захотите сделать это интерфейсом, чтобы можно было проверить необходимость завершения до передачи ваших объектов и вызвать метод, основанный на тесте интерфейса, а не проверять каждый класс отдельно.

ПРИМЕЧАНИЕ: Finalize - это только первое имя, которое пришло в голову. Для этого может быть (возможно, есть) лучшее название.

...