Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby Web Dev: The Other Way. Architecture aspects

Ruby Web Dev: The Other Way. Architecture aspects

MobiDev Meetup 30.11.2016

Avatar for Yevhen "Eugene" Kuzminov

Yevhen "Eugene" Kuzminov

November 30, 2016
Tweet

More Decks by Yevhen "Eugene" Kuzminov

Other Decks in Programming

Transcript

  1. Пошкоджена екосистема • Підсвідоме почуття • Спротив до змін і

    підлаштувань • Образ мислення розробників • Неосяжні зусилля, щоб “виростити” супротивника RoR • Без плюралізму та реального перезастосування коду • Потрібне розуміння кожного окремого компонента
  2. Впізнаєте Rails чи ні? Наприклад, Array • first • second

    • last • second_to_last • third_to_last • forty_two
  3. Маніфест • Перевага простим рішенням, а не легким • Конфігурація

    замість плутанини, а не конвенція замість конфігурації • Повторюй код, а не сподіватися на магію
  4. Стек моєї мрії, для покращення слиновиділення :) • Linux +

    RubyMine • PostgreSQL, Redis • Hanami.rb • Trailblazer • Dependency Injection Container • Minitest + Capybara • Vue.js + ES6/WebPack • Docker
  5. Хіба в Rails є проблеми? • ActiveRecord та бизнес логика

    • Before action • HTML helpers • Constants autoloading • Конфігурація у 3-4 способи • ...
  6. Чи є альтернатива Rails? • Свій Rake застосунок • Мікрофреймворк:

    Sinatra, Roda, dry-web • Спеціалізоване рішення: Grape • Hanami.rb (колишній Lotus) Але фреймворк це лише частина вашого застосунку!
  7. Архітектура • MVC - ще не архітектура в шірокому сенсі

    • “Товста” модель, “худий” контролер - не має різниці • SOLID - не срібная пуля • Може TRUE ?
  8. Що ж таке “TRUE” від Sandi Metz З книги “Practical

    Object-Oriented Design in Ruby: An Agile Primer” • Transparent - зміна кода несе передбачувані наслідки • Reasonable - маленькі зміни у бізнес вимогах, потребують маленькі зміни в коді • Usable - існуючий код легко перезастосовувати у непередбаченному зазделегідь контексті • Exemplary - найлегший спосіб внести змінити, це додати код, що у свою чергу такий же простий (як той, що вже існує)
  9. Як реалізувати це в Ruby? • Active Interactor (https://github.com/orgsync/active_interaction) •

    Rectify (https://github.com/andypike/rectify) • Trailblazer (http://trailblazer.to/) HTTP => Controller (redirecting, rendering, etc) Data Input => Form Object (validation, acceptable input) Business Logic => Command (logic for a specific use case) Data Persistence => Model (relationships between models) Data Access => Query Object (database queries) View Logic => Presenter (formatting data)