google analytics

Thursday, March 5, 2015

Побутовий SOLID

В моєму будинку є два комерційні приміщення. Якась людина купила квартиру на першому поверсі, і всупереч всім правилам і законам, зробила з неї два офіси. Один здали в оренду двом довгоногим красуням під турагенцію, а інший...

В іншому поки робився ремонт. Власник офісу (замовник) прийшов до сантехніка (програміст) , і сказав йому: в офісі потрібен туалет. Сантехнік використав патерн Унітаз, створив свій клас зі стандартним інтерфейсом діаметром 110мм, спустив "інтерфейс" в підвал, і взяв в мене ключі від підвалу. Лишалось під"єднатись до сервера, викликати "сеттер" .set(shit), і здати роботу. В підвалі, не маючи документації на АРІ, і найменшого здорового глузду, сантехнік знайшов інтерфейс - трубу більшого діаметру, наварив на неї "адаптер", і під"єднав інтерфейс унітазу через адаптер до АРІ сервера. Все перевірив - дані йдуть, сеттер не валиться, код 200. Якщо щось і буде - проблеми сервера. На рівень замовника пішов сигнал "зроблено", замовник заплатив гроші, і транзакцію закрили.

Юзери - щойно найняті продавчині - побачивши інтерфейс "унітаз", цілком очікувано почали в нього срати. Як юзерів їх не цікавило, що стається з їх відходами далі, ібо інкапсуляція і модель OSI. Вони не знали про те, що труба більшого діаметру насправді була вентиляційною (!!!) трубою старого заваленого бомбосховища, і лайно почало текти просто в підвал до сусіда. Сусіду спам не сподобався. Адаптер було брутально розламано, а Унітаз клієнта було забанено на сервері за допомогою монтажної піни і поліетиленових кульків. Замовник довго розбирався з листом від сервера, в результаті проект-офіс від гріха подалі продав, але "забув" сказати новому власнику про проблеми з інтеграцією з серверним АРІ.

Новий власник також виявився прибічником принципів SOLID і мультирівневої моделі з чітким розмежуванням відповідальностей. Тому почав вимагати в сервера відкрити доступ до АРІ, бо в нього білд саксес і всьо ідеально, дані виходять, на АРІ сервера потрапляють, а що там далі його не їбе ні грама. Він дивився на реалізацію інтеграції з сервером, постійно примовляв Йоб Твою Мать, але вперто стояв на своєму - він коректно викликає .set(shit), тож в нього все нормально, і це проблеми сервера.

Мораль: пишіть інтеграційні і функціональні тести, не довіряйте сліпо іншим рівням і мокам в юніттестах.

To Be Continued...

No comments: