Вопрос

Я часто слышу, как люди Bashing Sorms для того, чтобы быть негибкой и «утечкой абстракцией», но вы действительно не слышите Зачем они проблематичные. При правильном использовании, что именно это неисправности ОРМ? Я спрашиваю это, потому что я работаю над PHP ORM, и я хотел бы, чтобы это решить проблемы, что многие другие ОРМ развалились в, такие как ленивая погрузка и отсутствие подзапросов.

Пожалуйста, будьте конкретны с вашими ответами. Покажите некоторого кода или опишите схему базы данных, где борется борьба ORM. Не имеет значения языка или ORM.

Это было полезно?

Решение

Одним из более крупных проблем, которые я заметил со всеми операторами, которые я использовал, является обновлением только нескольких полей, не извлекая объект первым.

Например, скажем, у меня есть объект проекта, сопоставленный в моей базе данных со следующими полями: ID, имя, описание, SOPELING_USER. Скажите, через Ajax я хочу просто обновить поле описания. В большинстве Orms единственный способ для меня, чтобы обновить таблицу базы данных, когда только имеющие значения идентификатора и описания - либо извлекать объект проекта из базы данных, установить описание, а затем отправить объект обратно в базу данных (таким образом, требуя двух операций базы данных Просто для одного простого обновления) или обновить его через сохраненные процедуры (который является методом, который я использую в настоящее время).

Другие советы

Объекты и записи базы данных действительно не все, что подобные. Они набрали слоты, которые вы можете хранить вещи, но это об этом. Базы данных имеют совершенно другое понятие идентичности, чем языки программирования. Они не могут обрабатывать композитные объекты хорошо, поэтому вы должны использовать дополнительные таблицы и внешние ключей вместо этого. Большинство не имеют понятия типа наследства. И естественный способ навигации по сети объектов (следуйте некоторым указателям в одном объекте, получите еще один объект, а разрыв снова) гораздо менее эффективен при сопоставлении в мире базы данных, потому что вы должны сделать несколько круглых поездок и извлекать лоты данных, о которых вы не заботились.

Другими словами: абстракция не может быть сделана очень хорошо в первую очередь; Это не инструменты ORM, которые являются плохими, но метафора, которую они реализуют. Вместо идеального изоморфизма это только поверхностное сходство, поэтому сама задача не очень хорошая абстракция. (Это все еще более полезно, чем необходимость понять базы данных, хотя. Премещение для инструментов ORM приходит в основном из DBAS, глядя на простых программистов.)

ORMS также может писать код, который не эффективен. Поскольку производительность базы данных имеет решающее значение для большинства систем, они могут вызвать проблемы, которые можно было избежать, если человек написал код (но, что, возможно, не было лучше, если следствие человека не понял настройки производительности базы данных). Это особенно верно, когда запрос получается комплекс.

Я думаю, что моя самая большая проблема с ними, хотя это то, что, отделение деталей, младшие программисты получают меньше понимания того, как писать запросы, которые им нужно иметь возможность обрабатывать краевые чехлы и места, где ORM записывает действительно плохой код. Очень трудно изучать продвинутые вещи, когда вам никогда не пришлось понимать основы. Орм в руках кого-то, кто понимает присоединения и группу, и продвинул запрос, это хорошо. В руках тех, кто не понимает булевой алгебры и присоединения и кучу других основных концепций SQL, это очень плохое, что приводит к очень плохому дизайну базы данных и запросов.

Реляционные базы данных не являются объектами и не должны рассматриваться как таковые. Попытка сделать орел в шелковый кошелек, как правило, не успешно. Намного лучше узнать, в чем хороший орел, и почему и пусть орел летает, чем плохой кошелек и мертвый орел.

То, как я вижу, это похоже на это. Чтобы использовать ORM, вы должны обычно стекировать несколько функций PHP, а затем подключиться к базе данных и по существу все еще запускать запрос MySQL или что-то подобное.

Почему вся абстракция между кодом и базой данных? Почему мы не можем просто использовать то, что мы уже знаем? Как правило, веб-разработчик знает свой язык бэкэнда, их язык БД (какой-то SQL), а также какие-то языки для интерфейсов, такие как HTML, CSS, JS и т. Д.

По сути, мы пытаемся добавить слой абстракции, который включает в себя много функций (и все мы знаем, что функции PHP могут быть медленнее, чем присвоение переменной). Да, это микро расчет, но все же он добавляет.

У нас не только у нас есть несколько функций, но мы также должны учиться, как работает ORM, поэтому там есть некоторое время впустую. Я думал, что вся идея разделения кода было, чтобы ваш код был отделен на всех уровнях. Если вы в мире лампы, просто создайте свой запрос (вы должны знать MySQL) и используйте уже существующую функциональность PHP для подготовленных утверждений. ГОТОВО!

Лампа:

  • Создать запрос (строка);
  • Используйте файловые заявления MySQLI и извлеките данные в массив.

ORM Way:

  • запустить функцию, которая получает сущность
  • который запускает запрос MySQL
  • Запустите другую функцию, которая добавляет условный
  • запустить другую функцию, которая добавляет другой условный
  • запустить другую функцию, которая присоединяется
  • Запустите другую функцию, которая добавляет условные условные
  • запустить другую функцию, которая готовит
  • Запускает еще один запрос MySQL
  • запустить другую функцию, которая извлекает данные
  • Запускает еще один запрос MySQL

У кого-нибудь еще есть проблема с стеком ORM? Почему мы становимся такими ленивыми разработчиками? Или так творческий, что мы вредем нашему коду? Если это не сломалось, не исправьте это. В свою очередь, почините свою команду Dev, чтобы понять основы веб-разработки.

ОРМ пытается решить очень сложную проблему. Существуют краевые чехлы в Galore и основные компромиссы дизайна без четких или очевидных решений. Когда вы оптимизируете дизайн ORM для ситуации A, вы по своей природе сделаете это неловким для решения ситуации B.

Есть ОРМ, которые обрабатывают ленивую погрузку и подзапросущие в «достаточно хорошем», но почти невозможно добраться от «достаточно хорошего», чтобы «великолепно».

При разработке вашего ORM вы должны иметь довольно хорошую ручку по всей возможной неловкой базе данных, которые можно ожидать, что ваш ORM будет работать. Вы должны явно сделать компромисс, вокруг которых вы готовы справиться неловко.

Я не смотрю на ОРМ как негибкие или любые более протекающие, чем ваша средняя комплексная абстракция. То, что сказал, что некоторые ОРМ лучше, чем другие в этих отношениях.

Удачи изобретать колесо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top