Які проекти веб-розробок виграють від використання ORM?


10

Почну з того, що 95% моєї роботи з базою даних я виконував за допомогою SQL. Нещодавно я провів кілька досліджень різних ОРМ, таких як NHibernate та Doctrine.

Я бачу переваги в тому, що не потрібно знати багато SQL та портативність баз даних, які забезпечує ORM. Але я також бачу, що знання SQL зробить роботу з ORM більш ефективною, і я можу лише за один раз у своїй кар’єрі подумати, що найбільшою зміною програми буде постачальник бази даних.

Оскільки мені дуже зручно писати SQL і, мабуть, не розуміючи часто викладених переваг використання ORM, моє запитання до важких користувачів ORM таке:

Які проекти веб-розробок найбільше виграють від використання ORM?


3
Відповідь - "Усі вони". Але це, мабуть, не те, що ви хочете знати. Ви можете уточнити своє запитання, щоб задати більш конкретну інформацію.
S.Lott

1
Для мене SQL наразі легше виробляти, але це лише через мою прихильність (або незнання). Я читав, що ORM - це не завжди найкращий вибір, оскільки він повільніше, ніж звичайний SQL; проте багато розробників заявили, що це, як правило, не важливо. Мені найбільше цікаво проектів, які найкраще підходять для ORM. Я бачу, що більшість відповідей, ймовірно, будуть "усі вони", і це теж добре. Я не шукаю конкретної відповіді. :)
Фред Вілсон

Якщо ви не запитаєте більше деталей, ви не збираєтесь багато чому вчитися.
S.Lott

Відповіді:


5

(Майже) всі програми користуються ORM.

По-перше, я не згоден з перевагами, які ви перераховуєте для ORM .

  • Використання ORM не обов'язково означає, що вам не потрібно знати SQL. Знання SQL допоможе зрозуміти, що насправді робить інструмент ORM, що особливо корисно під час налагодження. Більше того, SQL насправді може знадобитися для розробки складних запитів, що виходять за рамки можливостей обраного вами ORM.
  • І як ви кажете, портативність рідко викликає занепокоєння в реальному житті.

Натомість реальні переваги ORM:

  • ORM економить час програміста, оскільки економить написання тонн логіки CRUD в SQL
  • багато ORM включають складну логіку кешування тощо, що важко записати та налагодити. Окрім економії часу, це може підвищити надійність та ремонтопридатність вашої програми (або принаймні заощадити час, який знадобиться для досягнення тих же результатів)
  • кращі ORM мають спільноту користувачів, які активно розробляють, підтримують та підтримують продукт. Спільнота навколо спеціального SQL в кращому випадку дещо менш орієнтована на проблеми, які нам потрібно вирішити.

Як коментуєте, одна нижня сторона ORM - це втрата продуктивності. Однак це, як правило, можна компенсувати, витрачаючи більше обладнання.

Зазвичай час програміста коштує дорожче обладнання, тому ORM - це взагалі хороший варіант замість ручного кодування SQL.

ORM найкраще підходить для програм із великою кількістю простої логіки бази даних CRUD. ORM менш ефективний для :

  • Програми, яким потрібен мало / взагалі відсутність доступу до бази даних.
  • Програми, які значною мірою залежать від складних запитів та дуже мало простої логіки CRUD
  • Ситуації, коли продуктивність є критичною, але де немає можливості розгортання більш швидкого обладнання

На мій досвід, такі ситуації рідкісні. Звідси моя відповідь.


"Використання ORM не обов'язково означає, що вам не потрібно знати SQL." - Такий справжній. Однією з переваг, які я бачу в командному середовищі, є те, що ми можемо сконцентрувати набір навичок SQL так, що не кожен розробник, який працює на бізнес-шарі, повинен бути експертом.
Фред Вілсон

1
Для складних запитів завжди можна повернутися до SQL і написати SQL-запит.
harsimranb

4

Мені також зручно писати SQL. Мені також набагато зручніше взагалі не писати жодного SQL, а також не турбуватися про підключення, відключення, об'єднання тощо до бази даних.

Отже .. Я відповім на негатив вашого запитання. Єдині проекти з веб-розробки, які НЕ виграють від ORM, - це той, що взагалі не спілкується з базою даних. Я вважаю, що це меншість (якщо така є).


+1: Я також вважаю себе дуже досвідченим в sql, але все ж віддаю перевагу OR / M. Насправді я б сказав, що вам точно потрібно мати ручку на sql, щоб добре використовувати OR / M, інакше, коли абстракція просочиться, ви ніколи не знайдете проблеми. "не потрібно багато знати SQL" - це не особливість. Для мене все полягає у підвищенні продуктивності та тому, що компілятор знаходить проблеми, а не час виконання, а також OR / M (особливо це стосується нових версій на основі генерики / linq).
Брук

@Brook - я від усієї думки згоден. Використання OR / M не означає, що знання SQL необов’язкові.
Otávio Décio

2

Виходячи з свого досвіду роботи з ASP.NET WebForms, я б запропонував, щоб веб-проекти, що використовують верховні веб-рамки, отримували найбільше користь від використання ORM.

За допомогою стану, що створюється, розмітка генерується автоматично за кадром, виходячи з ієрархії активних елементів управління сервером. Заманливо зробити так, щоб ці елементи контролю завантажувались і автоматично зберігали їх стан у базі даних. Тут допомагає ORM.

Ви начебто резюмуєте в кінці конвеєра (вихід HTML), і це, звичайно, запрошує розібратися з початком (джерело даних) таким же чином, щоб ви залишалися лише у вашій бізнес-логіці в коді програми.

Не те, що я не кажу, що це хороший спосіб робити речі. Просто ORM підходить природним чином.


2

У додатках, де у вас є велика, дуже пов'язана об'єктна модель, ORM рятує вас від написання однакових приєднань знову і знову.

Іншою перевагою є ледаче завантаження, коли ви хочете, щоб api повернув об'єктний графік, де клієнт api буде використовувати лише підмножину цього графіка.


1

Я вважаю, що ви плутаєте ORM з DBAL .

Поняття, на яке ви посилаєтесь, - це шар абстракції бази даних (DBAL), який дозволяє писати портативний "sql", який не залежить від основної системи баз даних.

ORM з іншого боку (який (майже?) Завжди будується поверх DBAL):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (Вікіпедія)

Простіше кажучи, ORM дозволяє перетворити дані з плоскої бази даних в завищене представлення об'єкта.


Дякую за роз’яснення. Основна причина для мене, щоб перейти до ORM, полягає в тому, щоб більше зосередитися на OOP і відмовитися від написання стільки SQL, якщо це має сенс для деяких проектів.
Фред Вілсон

1

Проекти, які не отримали б користі від ORM:

  • ті, що не є об'єктно-орієнтованими;
  • ті, яким не потрібно зберігати дані;
  • ті, що використовують об'єктно-орієнтовану БД, тому не потребують додаткового шару відображення;
  • ті, що використовують нереляційне рішення NoSQL;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.