SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Несоциалочка на рельсах 
Сергей Укустов 
Провектус, Казань 
2014-09-20 
Web Expert Day 
1 / 20
Большой проект 
 30 человек 
 4 года 
  330 000 строк кода 
  20 репозиториев 
 сложная предметная область 
 технические решения на границе экосистемы 
Ruby 
 рядом аналитический стек на 
Hadoop/Java/Python 
2 / 20
Сложность предметной области 
 Управление спросом (Demand Response) 
▶ N раз в год c XX:XX до YY:YY часов цены внезапно 
повышаются 
▶ события сгруппированы в программы 
▶ уведомление людей 
▶ уведомление устройств 
 Тарифный план 
▶ энергия: 0 — 100 кВч, 100 — 400 кВч,… 
▶ время: 8:00 — 12:00, 12:00 — 16:00,… 
▶ мощность: 10 кВ, 20кВ,… 
▶ пиковые часы: 12:00 — 14:00 послезавтра 
▶ время действия: июнь — август 
 Развитие стандартов: 2.0 и 1.0 — это две 
большие разницы 
3 / 20
Rails — говно 
 Покрывает 95% случаев 
 Культура необразованных упорков 
 Мантры как мины 
 MVC не масштабируется 
 «Всё уже написано до нас» 
4 / 20
Виджет — проблема 
 Автономный встраиваемый кусок 
функциональности 
 Имеет независимый от «большой» страницы 
поток управления 
 Плохо ложится на ReST и рельсовый MVC 
 Пример: создание и редактирование события 
управления спросом 
5 / 20
Виджет — решение 
Apotomo: https://github.com/apotonick/apotomo 
class ParentController  ActionController::Base 
has_widget do |root| 
root  widget(:event) 
end 
# ... 
end 
class EventWidget  Apotomo::Widget 
def new(args = {}); render; end 
def edit(args = {}); render; end 
def create(event); end # event — внутреннее для 
Apotomo событие 
end 
# Внутри шаблона 
= render_widget :event, :new 
6 / 20
Event sourcing внутри приложения 
 Легкое горизонтальное масштабирование 
 Несколько действий на один сигнал 
7 / 20
Базовое идеологическое про события 
 Что-то произошло ) что-то надо делать 
 Началось ) что-то надо делать 
 Закончилось ) что-то надо делать 
 На одно событие может быть 100500 действий 
8 / 20
Event sourcing vs Resque 
За Resque: 
 тот же «запустил и забыл» 
 та же легковесность запуска 
 то же масштабирование — воркеры можно 
разнести по разным машинам 
Против Resque: 
 один сигнал — одно действие 
9 / 20
Общая шина сообщений 
Можно использовать лучшее из обоих подходов: 
 очередь сообщений — для сообщений, 
 Resque — для действий. 
10 / 20
Сообщения vs HTTP API 
К рассмотрению: 
 Тяни или толкай 
 Объём даннных 
Очевидно: 
 малый объём оповещения — сообщения 
 большой объём данных — стягиваем через HTTP 
API 
11 / 20
EventMachine vs Resque 
12 / 20
Observers 
Против: 
 не входят в Rails 4 
 непрозрачны, слишком много магии 
За: 
 SRP: шлём сообщения 
Против: 
 есть выход и получше 
13 / 20
Request/Operation 
 Уточнённый кусок DDD: Boundary и Service 
 https://github.com/apotonick/trailblazer: 
Contract/Operation 
 Request — контракт: 
▶ первичная валидация, что параметры ок 
▶ удобство доступа к объектам предметной 
области 
▶ иммутабельный FormObject или ParameterObject 
class EventsController::Create::Request 
attr_reader :start_time 
def initialize(params) 
@device_uid = params[:device_uid] 
@start_time = params[:start_time] 
end 
def device 
@device ||= Device.find_by_uid(@device_uid) 
end 
end 
14 / 20
Request/Operation 
 Operation — кусок бизнес-логики AKA Service 
(DDD) AKA Command (CQRS). 
 В простейшем случае отвечает только на 
идемпотентный вызов #success? 
 Есть проблема с пространством имён — 
некрасиво 
class EventsController 
def create 
operation = Create::Operation.new(Create::Request. 
new(params)) 
if operation.success? 
# ... 
else 
# ... 
end 
end 
end 
15 / 20
Ограниченные контексты и разные 
языки 
 Главная система со своим сложившимся 
лексиконом 
 Smart Energy Profile 2 
 OpenADR 2.0b 
 Разные языки — разные серверы 
 Антикоррупционный слой через HTTP API 
▶ Хозяин и раб 
▶ Адаптер на стороне хозяина: переименование и 
комбинация 
▶ Декоратор на стороне раба: сложно 
▶ Срезаем углы: ActiveAdmin как JSON API 
▶ Углы могут кусать: id vs uid 
16 / 20
Разделение на гемы 
 Горизонтальное — по слоям — ок 
 Вертикальное — самоубийство 
 Связанные жизненные циклы — зло 
 Корпоративное пространство имён — ок, если 
готовить правильно 
 Помни о близнецовой связи (connascence) 
17 / 20
Кодерские мелочи 
 Декораторы убивают хелперы, и это хорошо 
 FormObjects вместо accepts_nested_attributes_for 
 Иммутабельность FTW 
 Щепотка ФП: #flat_map, #inject, #take 
 Если появляется QueryObject, что-то сдохло в 
консерватории 
 Yardoc 
18 / 20
Бог не фраер 
Ибо очи Его над путями человека, и Он видит все 
шаги его 
 Абстракции 
 Границы 
 Асинхронность 
 SOLID 
 Документация 
 Рациональность 
19 / 20
Вопросы? 
20 / 20

Contenu connexe

En vedette

Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...
Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...
Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...Provectus
 
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...Provectus
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Provectus
 
Артем Крикун (AT Production) “Промо-видео для приложений.”
Артем Крикун (AT Production) “Промо-видео для приложений.”Артем Крикун (AT Production) “Промо-видео для приложений.”
Артем Крикун (AT Production) “Промо-видео для приложений.”Provectus
 
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...
Василий Захарченко: "Взгляд на  queryDsl-sql фреймворк как альтернатива Hiber...Василий Захарченко: "Взгляд на  queryDsl-sql фреймворк как альтернатива Hiber...
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...Provectus
 
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Provectus
 
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Provectus
 
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus ITProvectus
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Provectus
 
Коммуникация и эффективные письма
Коммуникация и эффективные письмаКоммуникация и эффективные письма
Коммуникация и эффективные письмаProvectus
 
Максим Мазурок “Material Design in Web Applications.”
Максим Мазурок “Material Design in Web Applications.”Максим Мазурок “Material Design in Web Applications.”
Максим Мазурок “Material Design in Web Applications.”Provectus
 
Apache Solr/Lucene Internals by Anatoliy Sokolenko
Apache Solr/Lucene Internals  by Anatoliy SokolenkoApache Solr/Lucene Internals  by Anatoliy Sokolenko
Apache Solr/Lucene Internals by Anatoliy SokolenkoProvectus
 

En vedette (13)

Hackathon
HackathonHackathon
Hackathon
 
Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...
Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...
Михаил Лебединский (Termopal) “Особенности разработки веб и мобильных приложе...
 
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...
Евгений Плохой (CapableBits) “Продвижение приложений до и после выхода на рын...
 
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
 
Артем Крикун (AT Production) “Промо-видео для приложений.”
Артем Крикун (AT Production) “Промо-видео для приложений.”Артем Крикун (AT Production) “Промо-видео для приложений.”
Артем Крикун (AT Production) “Промо-видео для приложений.”
 
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...
Василий Захарченко: "Взгляд на  queryDsl-sql фреймворк как альтернатива Hiber...Василий Захарченко: "Взгляд на  queryDsl-sql фреймворк как альтернатива Hiber...
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...
 
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
Дима Гадомский (Юскутум) “Можно ли позаимствовать дизайн и функционал так, чт...
 
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
Василевский Илья (Fun-box): "автоматизация браузера при помощи PhantomJS"
 
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT
"PR vs HR" by Tatyana Kozovaya, PR Manager at Provectus IT
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"
 
Коммуникация и эффективные письма
Коммуникация и эффективные письмаКоммуникация и эффективные письма
Коммуникация и эффективные письма
 
Максим Мазурок “Material Design in Web Applications.”
Максим Мазурок “Material Design in Web Applications.”Максим Мазурок “Material Design in Web Applications.”
Максим Мазурок “Material Design in Web Applications.”
 
Apache Solr/Lucene Internals by Anatoliy Sokolenko
Apache Solr/Lucene Internals  by Anatoliy SokolenkoApache Solr/Lucene Internals  by Anatoliy Sokolenko
Apache Solr/Lucene Internals by Anatoliy Sokolenko
 

Similaire à Сергей Укустов (Provectus IT): "Несоциалочка на Рельсах"

Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Транслируем.бел
 
Node.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaNode.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaEugene Khvedchenya
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Dmytro Mindra
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remotingKewpaN
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Tanya Denisyuk
 
Разработка сетевых приложений с gevent
Разработка сетевых приложений с geventРазработка сетевых приложений с gevent
Разработка сетевых приложений с geventAndrey Popp
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Timur Shemsedinov
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsguest092df8
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноCUSTIS
 

Similaire à Сергей Укустов (Provectus IT): "Несоциалочка на Рельсах" (20)

What's in a metrics? Ruby Russia 2018
What's in a metrics? Ruby Russia 2018What's in a metrics? Ruby Russia 2018
What's in a metrics? Ruby Russia 2018
 
Middleware
MiddlewareMiddleware
Middleware
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
 
Log+
Log+Log+
Log+
 
Node.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaNode.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.ua
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
Разработка сетевых приложений с gevent
Разработка сетевых приложений с geventРазработка сетевых приложений с gevent
Разработка сетевых приложений с gevent
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3
 
Yii rit 2010
Yii rit 2010Yii rit 2010
Yii rit 2010
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
Секрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдноСекрет производства: программный продукт, за который не будет стыдно
Секрет производства: программный продукт, за который не будет стыдно
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 

Plus de Provectus

Артем Тритяк, Lead Front-End developer в Electric Cloud
 Артем Тритяк, Lead Front-End developer в Electric Cloud Артем Тритяк, Lead Front-End developer в Electric Cloud
Артем Тритяк, Lead Front-End developer в Electric CloudProvectus
 
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...Provectus
 
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”Provectus
 
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...Provectus
 
Логотип — Бизнес или творчество
Логотип — Бизнес или творчествоЛоготип — Бизнес или творчество
Логотип — Бизнес или творчествоProvectus
 
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКА
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКАЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКА
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКАProvectus
 
Требования к заказчику. Роль QA в процессе постановки тех. задания
Требования к заказчику. Роль QA в процессе постановки тех. заданияТребования к заказчику. Роль QA в процессе постановки тех. задания
Требования к заказчику. Роль QA в процессе постановки тех. заданияProvectus
 
«A/B testing или реинкарнация Библейского змея...»
«A/B testing или реинкарнация Библейского змея...»«A/B testing или реинкарнация Библейского змея...»
«A/B testing или реинкарнация Библейского змея...»Provectus
 

Plus de Provectus (8)

Артем Тритяк, Lead Front-End developer в Electric Cloud
 Артем Тритяк, Lead Front-End developer в Electric Cloud Артем Тритяк, Lead Front-End developer в Electric Cloud
Артем Тритяк, Lead Front-End developer в Electric Cloud
 
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...
Федор Поляков (Looksery) “Face Tracking на мобильных устройствах в режиме реа...
 
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”
Виталий Чмыхун (Provectus) “Как мы автоматизировали мобайл деплоймент.”
 
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...
Роман Колос (ComboApp) “Методология использования инструментов аналитики в ма...
 
Логотип — Бизнес или творчество
Логотип — Бизнес или творчествоЛоготип — Бизнес или творчество
Логотип — Бизнес или творчество
 
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКА
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКАЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКА
ЕСЛИ БЫ УОЛТ ДИСНЕЙ ДЕЛАЛ ИНТЕРФЕЙСЫ. MOTION DESIGN. ПРАКТИКА
 
Требования к заказчику. Роль QA в процессе постановки тех. задания
Требования к заказчику. Роль QA в процессе постановки тех. заданияТребования к заказчику. Роль QA в процессе постановки тех. задания
Требования к заказчику. Роль QA в процессе постановки тех. задания
 
«A/B testing или реинкарнация Библейского змея...»
«A/B testing или реинкарнация Библейского змея...»«A/B testing или реинкарнация Библейского змея...»
«A/B testing или реинкарнация Библейского змея...»
 

Сергей Укустов (Provectus IT): "Несоциалочка на Рельсах"

  • 1. Несоциалочка на рельсах Сергей Укустов Провектус, Казань 2014-09-20 Web Expert Day 1 / 20
  • 2. Большой проект 30 человек 4 года 330 000 строк кода 20 репозиториев сложная предметная область технические решения на границе экосистемы Ruby рядом аналитический стек на Hadoop/Java/Python 2 / 20
  • 3. Сложность предметной области Управление спросом (Demand Response) ▶ N раз в год c XX:XX до YY:YY часов цены внезапно повышаются ▶ события сгруппированы в программы ▶ уведомление людей ▶ уведомление устройств Тарифный план ▶ энергия: 0 — 100 кВч, 100 — 400 кВч,… ▶ время: 8:00 — 12:00, 12:00 — 16:00,… ▶ мощность: 10 кВ, 20кВ,… ▶ пиковые часы: 12:00 — 14:00 послезавтра ▶ время действия: июнь — август Развитие стандартов: 2.0 и 1.0 — это две большие разницы 3 / 20
  • 4. Rails — говно Покрывает 95% случаев Культура необразованных упорков Мантры как мины MVC не масштабируется «Всё уже написано до нас» 4 / 20
  • 5. Виджет — проблема Автономный встраиваемый кусок функциональности Имеет независимый от «большой» страницы поток управления Плохо ложится на ReST и рельсовый MVC Пример: создание и редактирование события управления спросом 5 / 20
  • 6. Виджет — решение Apotomo: https://github.com/apotonick/apotomo class ParentController ActionController::Base has_widget do |root| root widget(:event) end # ... end class EventWidget Apotomo::Widget def new(args = {}); render; end def edit(args = {}); render; end def create(event); end # event — внутреннее для Apotomo событие end # Внутри шаблона = render_widget :event, :new 6 / 20
  • 7. Event sourcing внутри приложения Легкое горизонтальное масштабирование Несколько действий на один сигнал 7 / 20
  • 8. Базовое идеологическое про события Что-то произошло ) что-то надо делать Началось ) что-то надо делать Закончилось ) что-то надо делать На одно событие может быть 100500 действий 8 / 20
  • 9. Event sourcing vs Resque За Resque: тот же «запустил и забыл» та же легковесность запуска то же масштабирование — воркеры можно разнести по разным машинам Против Resque: один сигнал — одно действие 9 / 20
  • 10. Общая шина сообщений Можно использовать лучшее из обоих подходов: очередь сообщений — для сообщений, Resque — для действий. 10 / 20
  • 11. Сообщения vs HTTP API К рассмотрению: Тяни или толкай Объём даннных Очевидно: малый объём оповещения — сообщения большой объём данных — стягиваем через HTTP API 11 / 20
  • 13. Observers Против: не входят в Rails 4 непрозрачны, слишком много магии За: SRP: шлём сообщения Против: есть выход и получше 13 / 20
  • 14. Request/Operation Уточнённый кусок DDD: Boundary и Service https://github.com/apotonick/trailblazer: Contract/Operation Request — контракт: ▶ первичная валидация, что параметры ок ▶ удобство доступа к объектам предметной области ▶ иммутабельный FormObject или ParameterObject class EventsController::Create::Request attr_reader :start_time def initialize(params) @device_uid = params[:device_uid] @start_time = params[:start_time] end def device @device ||= Device.find_by_uid(@device_uid) end end 14 / 20
  • 15. Request/Operation Operation — кусок бизнес-логики AKA Service (DDD) AKA Command (CQRS). В простейшем случае отвечает только на идемпотентный вызов #success? Есть проблема с пространством имён — некрасиво class EventsController def create operation = Create::Operation.new(Create::Request. new(params)) if operation.success? # ... else # ... end end end 15 / 20
  • 16. Ограниченные контексты и разные языки Главная система со своим сложившимся лексиконом Smart Energy Profile 2 OpenADR 2.0b Разные языки — разные серверы Антикоррупционный слой через HTTP API ▶ Хозяин и раб ▶ Адаптер на стороне хозяина: переименование и комбинация ▶ Декоратор на стороне раба: сложно ▶ Срезаем углы: ActiveAdmin как JSON API ▶ Углы могут кусать: id vs uid 16 / 20
  • 17. Разделение на гемы Горизонтальное — по слоям — ок Вертикальное — самоубийство Связанные жизненные циклы — зло Корпоративное пространство имён — ок, если готовить правильно Помни о близнецовой связи (connascence) 17 / 20
  • 18. Кодерские мелочи Декораторы убивают хелперы, и это хорошо FormObjects вместо accepts_nested_attributes_for Иммутабельность FTW Щепотка ФП: #flat_map, #inject, #take Если появляется QueryObject, что-то сдохло в консерватории Yardoc 18 / 20
  • 19. Бог не фраер Ибо очи Его над путями человека, и Он видит все шаги его Абстракции Границы Асинхронность SOLID Документация Рациональность 19 / 20