Мені справді потрібно побачити деякі чесні, продумані дискусії щодо достоїнств прийнятої в даний час парадигми дизайну додатків для підприємств .
Я не переконаний, що об'єкти сутності повинні існувати.
Під об'єктами сутності я маю на увазі типові речі, які ми схильні будувати для наших додатків, наприклад "Особа", "Рахунок", "Замовлення" тощо.
Моя нинішня філософія дизайну така:
- Весь доступ до бази даних повинен здійснюватися через збережені процедури.
- Кожен раз, коли вам потрібні дані, викличте збережену процедуру та повторіть її через SqlDataReader або рядки в таблиці даних
(Примітка. Я також створив корпоративні додатки з Java EE; java люди, будь ласка, замініть еквівалент моїми .NET прикладами)
Я не анти-ОО. Я пишу безліч класів для різних цілей, тільки не сутностей. Я визнаю, що значна частина класів, які я пишу, - це статичні класи-помічники.
Я не будую іграшки. Я говорю про великі, великі за обсягом транзакційні програми, розгорнуті на декількох машинах. Веб-додатки, сервіси Windows, веб-сервіси, взаємодія b2b, ви її називаєте.
Я використовував АБО Mappers. Я написав декілька. Я використав стек Java EE, CSLA та кілька інших еквівалентів. Я не тільки використовував їх, але активно розробляв і підтримував ці програми у виробничих умовах.
Я прийшов до бойового перевіреного висновку , що об'єкти суті отримує на нашому шляху, і наше життя було б так набагато простіше і без них.
Розглянемо цей простий приклад: ви отримуєте виклик підтримки щодо певної сторінки у вашій програмі, яка не працює належним чином, можливо, одне з полів не зберігається так, як має бути. З моєю моделлю розробник, призначений знайти проблему, відкриває рівно 3 файли . ASPX, ASPX.CS і файл SQL із збереженою процедурою. Проблема, яка може бути відсутнім параметром для виклику збереженої процедури, займає кілька хвилин. Але з будь-якою моделлю сутності ви незмінно запустите налагоджувач, почнете переглядати код і, можливо, у візуальній студії відкриєте 15-20 файлів. На той момент, коли ви спустилися до нижньої частини стека, ви забули, з чого почали. Ми можемо одночасно тримати стільки речей у голові. Програмне забезпечення неймовірно складне без додавання зайвих шарів.
Складність розробки та усунення несправностей - це лише одна зі сторін моєї суті.
Тепер поговоримо про масштабованість.
Чи усвідомлюють розробники, що кожен раз, коли вони пишуть або змінюють будь-який код, який взаємодіє з базою даних, їм потрібно робити точний аналіз точного впливу на базу даних? І не лише копія розробки, я маю на увазі міміку виробництва, тож ви можете бачити, що додатковий стовпець, який ви зараз потребуєте для вашого об'єкта, просто визнав недійсним поточний план запитів, а звіт, який працює за 1 секунду, тепер займе 2 хвилини, просто оскільки ви додали один стовпець до списку вибору? І виходить, що індекс, який вам зараз потрібен, настільки великий, що DBA буде потрібно змінювати фізичний макет ваших файлів?
Якщо ви дозволите людям занадто віддалятися від фізичного сховища даних з абстракцією, вони створять хаос із додатком, який потребує масштабування.
Я не завзятий. Я можу переконатися, що я помиляюся, і, можливо, я є, оскільки є такий сильний поштовх у напрямку до Linq до Sql, ADO.NET EF, Hibernate, Java EE тощо. Будь ласка, продумайте ваші відповіді, якщо я щось пропускаю дуже хочу знати, що це таке, і чому я повинен змінити своє мислення.
[Редагувати]
Схоже, що це запитання знову стає активним, тому тепер, коли у нас є нова функція коментарів, я прокоментував декілька відповідей. Дякую за відповіді, я думаю, що це здорова дискусія.
Напевно, мені повинно було бути більш зрозуміло, що я кажу про додатки підприємств. Я дійсно не можу коментувати, скажімо, гру, яка працює на чиємусь робочому столі чи мобільному додатку.
Я маю викласти тут зверху у відповідь на кілька подібних відповідей: ортогональність та роз'єднаність проблем часто наводяться як причини перейти до сутності / ОРМ. Збережені процедури, на мене, є найкращим прикладом розділення проблем, які я можу придумати. Якщо ви забороните будь-який інший доступ до бази даних, за винятком збережених процедур, ви можете теоретично переробити всю вашу модель даних і не порушити жодного коду, якщо ви підтримували входи та виходи збережених процедур. Вони є прекрасним прикладом програмування за контрактом (до тих пір, поки ви уникаєте "select *" і документуєте набори результатів).
Запитайте у когось, хто довгий час працював у цій галузі та працював із довговічними додатками: скільки прикладних програм та шарів користувальницького інтерфейсу прийшло та відійшло, поки база даних жила? Наскільки важко налаштувати та рефакторировать базу даних, коли є 4 або 5 різних стійких шарів, що генерують SQL для отримання даних? Ви нічого не можете змінити! ORM або будь-який код, що створює SQL, блокує вашу базу даних в камені .