PHP Inside №3 •
Реализация объектного интерфейса к любым SQL-операциям в общем виде не приводит к упрощению, а порой наоборот;
•
Путь OQL(Hibernate - HQL): from a where a.b.b_attr = ...
Приложение I. Слайды
Основные плюсы подхода •
концентрация кода, относящегося к СУБД и описанию данных в отдельном(одном) месте;
•
автогенерация рутинных запросов, унификация базовых стратегий отображения. единая концепция, меньше ошибок, возможность быстрого развертывания проекта в полу-рабочее состояние (большой плюс, т.к. разработка всегда итеративна);
•
следствие (1): дополнительные возможности автоматизации разработки,отладки, тестирования (автогенерация кода, тестов по схеме данных ─ в ряде случаев удобно);
•
относительный плюс: удобство объектной модели (радикальная версия, крайне неверная - «программисту проще с классами»).
Основные минусы подхода •
Богатство реляционных операций несозмеримо больше возможностей большинства ORM. РМ имеет серъезную теоретическую базу, OM ─ нестрогие («инженерные», ненаучные), удобные человеку представления об объектах реального мира. неизбежны: доводка, смесь подходов (риск получить неуправляемый код);
•
Решения на базе ORM сложно назвать «лёгкими» (дополнительная проблема скриптовых языков ─ компиляция);
•
Члены команды должны «говорить на одном языке», а принципы ORM стратегии нетривиальны для полного понимания и эффективного использования ─ необходимы дополнительные затраты на обучение;
•
Сложность унификации отображения для разных СУБД. из-за этого многие ORM имеют ряд неочевидных ограничений, которые могут быть замечены уже после выбора стратегии и начала работ;
•
Для большинства «продвинутых» СУБД эффективнее бизнес-логику переносить в хранимые процедуры и триггеры (производительность может отличаться на порядок и больше). ORM как правило «навязывает» другую стратегию;
•
Из-за специфического разделения кода «модули» в большом проекте должны удовлетворять особенным требованиям, особенно если необходима настраиваемая «сборка» из различных компонент.
Специфика веб-проектов •
Почти всегда bottleneck-база;.
•
Для разных классов задач распространены свои механизмы кэширования (кэширование отрендеренных шаблонов(СМИ) вместо кэширования объектов(сообщества, персонифицированные вебсервисы)); 60