Лучше заполнить свойства объекта в конструкторе или когда на свойство ссылаются? - PullRequest
0 голосов
/ 21 июля 2011

Фон: у меня есть объект с дюжиной или около того свойств. Объект создается путем передачи GUID в конструктор. Этот GUID является первичным ключом, используемым для извлечения значений свойств из базы данных. Каждое свойство хранится в отдельной таблице в базе данных. Мы используем EF4 для подключения к базе данных.

Лучше ли получать все свойства сразу из базы данных, или лучше получать значения свойств из базы данных, когда свойство фактически используется в коде? Какова рекомендуемая лучшая практика?

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Я бы, вероятно, изменил код, чтобы передать Guid статическому фабричному методу, который затем выполнил поиск и передал восстановленную сущность конструктору. Таким образом, сам конструктор не должен выполнять столько работы.

В большинстве случаев я бы сделал все это с нетерпением - хотя бы обычно странно иметь объект, который "кажется" простым, но который затем выполняет потенциально дорогой и ошибочный поиск в базе данных, когда Вы получаете доступ к свойствам. И да, вы должны стремиться получить все в одном поиске в базе данных - если только одно из свойств не является коллекцией само по себе и т. Д. Если это всего лишь случай выборки простых полей из базы данных, было бы безумно выполнить один поиск в доступ к свойству - который может также привести к несогласованности данных.

0 голосов
/ 21 июля 2011

На моей работе мы используем java / hibernate для обработки запросов, связанных с БД. Вы можете настроить его любым способом - отложенная выборка ждет, пока приложение запросит свойство, или вы можете заполнить свойства объекта в начальном запросе.

Я не уверен в стандарте; однако для нашего приложения мы обнаружили, что заполнение свойств сначала оказалось намного быстрее. Вероятно, стоит провести несколько тестов, чтобы увидеть, как ваше приложение ведет себя - может сильно отличаться от нашего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...