Проект, над которым я работаю, сталкивается с дилеммой дизайна: как получить объекты и коллекции объектов из базы данных. Иногда полезно буферизовать * все * объекты из базы данных с их свойствами в память, иногда полезно просто установить идентификатор объекта и запросить его свойства по запросу. (1 вызов на объект для получения всех свойств). И во многих случаях коллекции должны поддерживать как буферизацию объектов в памяти, так и инициализацию с минимальным количеством информации для доступа по запросу. В конце концов, не все можно буферизовать в памяти и не все можно прочитать по запросу. Это повсеместная проблема памяти и ввода-вывода.
Кому-нибудь приходилось сталкиваться с такой же проблемой? Как повлияло на ваш дизайн? Какие тяжелые уроки извлечены? Есть другие мысли и рекомендации?
РЕДАКТИРОВАТЬ: мой проект является классическим примером dll бизнес-уровня, используемого веб-приложением, веб-службами и настольным приложением. Когда для настольного приложения запрашивается список продуктов и отображается только по названию продукта, можно использовать следующую последовательность шагов для отображения всех продуктов (допустим, в базе данных миллион продуктов):
1. Один вызов БД для получения всех названий продуктов
2. Один вызов БД для получения всей информации о продукте, если пользователь нажимает на продукт, чтобы просмотреть подробности (доступ по запросу)
Однако, если этот же API будет использоваться веб-службой для отображения всех продуктов с подробной информацией, сетевой трафик станет болтливым. Лучшая последовательность в этом случае будет:
1. Какого черта, буферизировать все продукты и поля продуктов всего за один вызов базы данных (в этом случае буферизация 1 миллиона продуктов также выглядит пугающей)