Gigahard
Новичок
ООП v.s. Оптимизация
Столкнулся я вот с одной дилеммой.
Имеется ОО модель дерева. Каждый узел представляет собой отдельный самостоятельный объект. Соответственно этот объект может самостоятельно взаимодействовать с источником данных - инициализироваться и сохранять данные. Построение и инициализация всего дерева строится на инициализации всех его составляющих объектов.
Под инициализацией подразумевается загрузка из источника данных (БД). Такой подход позволяет гибко использовать возможности узлов, при необходимости не выстраивая все дерево целиком, а вычленяя какие то его отдельные ветви. Но так получается, что на инициализацию каждого отдельного узла, уходит как минимум один запрос к БД.
На форуме встречается точка зрения, что это не правильный подход. Что построение дерева должно производится единичным запросом возвращающим всю структуру дерева. А уже потом всю эту структуру "разделывать" как душе угодно.
Но возникает вопрос об универсальности такого подхода. Получается в этом случае узлы нужно лишить возможности самостоятельной иницализации и возложить эту обязанность на какой то общий управляющий класс. И возможно, каждый раз переписывать код этого управляющего класса при необходимости появления нового типа запроса.
Насколько вообще правильно запрашивать структуру всего дерева, если я хочу получить информацию всего по паре узлов?
Столкнулся я вот с одной дилеммой.
Имеется ОО модель дерева. Каждый узел представляет собой отдельный самостоятельный объект. Соответственно этот объект может самостоятельно взаимодействовать с источником данных - инициализироваться и сохранять данные. Построение и инициализация всего дерева строится на инициализации всех его составляющих объектов.
Под инициализацией подразумевается загрузка из источника данных (БД). Такой подход позволяет гибко использовать возможности узлов, при необходимости не выстраивая все дерево целиком, а вычленяя какие то его отдельные ветви. Но так получается, что на инициализацию каждого отдельного узла, уходит как минимум один запрос к БД.
На форуме встречается точка зрения, что это не правильный подход. Что построение дерева должно производится единичным запросом возвращающим всю структуру дерева. А уже потом всю эту структуру "разделывать" как душе угодно.
Но возникает вопрос об универсальности такого подхода. Получается в этом случае узлы нужно лишить возможности самостоятельной иницализации и возложить эту обязанность на какой то общий управляющий класс. И возможно, каждый раз переписывать код этого управляющего класса при необходимости появления нового типа запроса.
Насколько вообще правильно запрашивать структуру всего дерева, если я хочу получить информацию всего по паре узлов?
кто мешает реализовать правильный (подход - дело вкуса и задачи) объект Node, который будет уметь как выбрать только своих потомков, так и потомков потомков (с нужной вложенностью)? только не стоит, на мой взгляд, сразу превращать потомков в объекты - храните как данные. и при необходимости (запрос) формируйте объект. 
