Я працюю в компанії, яка використовує лише збережені процедури для доступу до всіх даних, що робить дуже прикрою тримати синхронізацію наших локальних баз даних, як кожне зобов’язання, яке нам доведеться запускати нові програми. У минулому я використовував деякі основні ORM, і я вважаю цей досвід набагато кращим і чистішим. Я хотів би запропонувати менеджеру з розробки та решті команди, щоб ми розглядали можливість використання ORM якоїсь форми для подальшого розвитку (решта команди лише знайомі зі збереженими процедурами і ніколи більше нічого не використовували). Поточна архітектура .NET 3.5, написана як .NET 1.1, з "класами богів", які використовують дивну реалізацію ActiveRecord і повертають нетипізовані набори даних, які перекинуті на файли, що стоять за кодом - класи працюють приблизно так:
class Foo {
public bool LoadFoo() {
bool blnResult = false;
if (this.FooID == 0) {
throw new Exception("FooID must be set before calling this method.");
}
DataSet ds = // ... call to Sproc
if (ds.Tables[0].Rows.Count > 0) {
foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString();
// other properties set
blnResult = true;
}
return blnResult;
}
}
// Consumer
Foo foo = new Foo();
foo.FooID = 1234;
foo.LoadFoo();
// do stuff with foo...
В основному не застосовується жодна модель дизайну. Тестів взагалі немає (ніхто інший не знає, як писати одиничні тести, а тестування проводиться через завантаження веб-сайту вручну та перебирання). Переглядаючи нашу базу даних, ми маємо: 199 таблиць, 13 переглядів, колосальних 926 збережених процедур та 93 функції. Близько 30 таблиць використовується для пакетних завдань або зовнішніх речей, решта використовуються в нашому базовому додатку.
Чи варто навіть в цьому сценарії дотримуватися іншого підходу? Я говорю про рух вперед лише тому, що нам заборонено переробляти існуючий код, оскільки "він працює", тому ми не можемо змінити існуючі класи для використання ORM, але я не знаю, як часто ми додаємо нові модулі замість цього додавання до / виправлення поточних модулів, тому я не впевнений, чи ORM - це правильний підхід (занадто багато вкладено у збережені процедури та набори даних). Якщо це правильний вибір, як я можу подати випадок використання цього? Єдина користь, яку я можу подумати, - це чистіший код (хоча це може і не бути, оскільки нинішня архітектура не є ' t побудований з урахуванням ORM, так що ми в основному будемо встановлювати присвоєння ORM для майбутніх модулів, але старі все ще будуть використовувати DataSets) і менше клопоту, щоб запам'ятати, які сценарії процедур були запущені та які потрібно запускати, і т. д., але це все, і я не знаю, наскільки переконливим буде аргумент. Інтенсивність ремонту - це ще одна проблема, однак, мабуть, не хвилює ніхто, крім мене.