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

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)