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