Джеффс ссылается на статью Тед Ньюардс . Если вы в деталях, то вам нужно посмотреть там:
оригинал - http://blogs.tedneward.com/post/the-vietnam-of-computer-science/
продолжение - http://blogs.tedneward.com/post/thoughts-on-vietnam-commentary/
Из оригинальных баллов Теда у меня есть это:
- 1 был не прав (личность)
- 2 из них решены (Частичные объекты и N + 1)
- 2 являются дискуссионными (двойная схема / общая схема).
Отказ от ответственности: я являюсь автором Ebean ORM, поэтому я буду ссылаться на него для различных «решений» поднятых вопросов.
Оригинальные очки Теда (искаженные, потому что это действительно многословно):
1. Неполная проблема объекта.
Всегда решаемо. Ebean ORM сделал частичные объекты функциональными для своего языка запросов и всех внутренних объектов. JPQL не сделал это приоритетом, к сожалению, там больше проблем.
2. N + 1 (парадокс времени загрузки Теда)
Всегда решаемо. Должно быть записано как 1 + N / batchSize
, но это более интересно, чем это (для каждого пути необходимо учитывать SQL-пейджинг, избегать sql декартовых произведений). Некоторые ORM, к сожалению, вносят правильный вклад в это, и это делает ORM в целом дурной славой. Некоторые ORM в порядке, пока вы не достигнете уровня сложности (например, OneToMany внутри OneToMany внутри OneToMany).
Просто для того, чтобы повысить ставку здесь, ORM может профилировать использование графа объектов и автоматически оптимизировать запрос (только выборка того, что необходимо, определение путей выборки для оптимизации для N + 1 и т. Д.).
Эта идея автоматической оптимизации запросов ORM возникла в Техасском университете (с использованием Hibernate). Он был включен в состав Ebean ORM в 2008 году, поэтому уже давно.
3. Идентичность
Тед рассуждает о несоответствии идентичности и параллелизма. Эта точка неуместна, так как ORM (ну, все, кого я знаю) описывают этот аспект в точно в том же поместье, что и в предыдущих клиент-серверных инструментах, и, в частности, ORM предоставляют SNAPSHOT просмотр части базы данных для приложения. Здесь никогда не возникало проблем, но реализации ORM могли вступить в конфликт с чрезмерной зависимостью, например, от hashCode () / equals ().
4. Задача двойной схемы
Это спорно. Если организация позволяет, то ORM может предоставить сценарий DIFF / SQL для схемы, который выполняется FlywayDB / Liquibase и т. Д. Если организации не позволяют, это может быть проблемой до некоторой степени.
5. Рефакторинг БД / Общая схема
Это спорно. Люди разработки / нормализации БД будут утверждать, что дизайн БД должен перейти на 4NF, и это означает, что любой рефакторинг должен быть исключительно аддитивным (денормализация, добавление столбцов / таблиц) и не прерывать изменения. Люди, которые не верят в нормализацию, будут сходить с ума от беспокойства по поводу общей схемы.