Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемwww.devconf.ru
1 Политика невмешательства Как в tulp.ru решена задача сохранения изменений состояния системы
2 Постановка задачи Состояние системы o Модель А o + Модель B o + Модель C Требуется просматривать o состояние "до" изменения o состояние "после" изменения o служебную информацию (кто, когда,...)
3 Варианты решения Inline code Callback before_save, after_save Observer paper_trail, act_as_versioned Decorator method_decorators Aspect aspectr, aquarium
4 Inline code save_before( a, b, c ); change( a, b, c ); save_after( a, b, c ); Загрязняется основная логика Необходимо поддерживать изменения (не катит)
5 Callback before_save :save_state_before after_save :save_state_after Сохранение состояния 1 модели (не группы) Дополнительный код в моделях
6 AR::Observer: обычная реализация class UserObserver < ActiveRecord::Observer def after_save(user) … end Сохранение состояния 1 модели (не группы)
7 AR::Observer: реализация через gem class User < ActiveRecord::Base # команда подключения функционала гема has_paper_trail # acts_as_versioned end Сохранение состояния 1 модели (не группы) Дополнительный код в моделях
8 Decorator class UserService < MethodDecorators +Log_user_state def approve(user_id) User.find(user_id).approve() Billing.add_user(user_id) Complaint.scope_user(user_id).each(&:close) save! end Нужно много различных декораторов В коде есть следы (хоть и приемлемо мало) gem install method_decorator
9 Aspect
10 AOP Aspect Advice Join Point Программа … user.set_role("admin") … Aspect class UserAspect < AOP advice User, :set_role, options end
11 Aspect class Changelog watch UserService, [:approve, :disapprove], { state_before: lambda{ |user_id| … }, state_after: lambda{ … }, state_error: lambda{ … } } end Нет ни единой строчки в моделях/сервисах/etc Все настройки – в одном месте
12 Выбор AspectR (2002) Aquarium - gem install aquarium
13 Практика Aquarium – мощный – слишком Упрощение интерфейса – более жёсткие требования – обработка ошибок – спокойный сон после release
14 Откат в жизни модератора Детальная трассировка изменений У меня все ходы записаны (с) 12ст Легко откатить изменения Долой коррупцию, распил и откаты!
15 Ссылки - wikipedia - wikipedia - method_decorators - github - rubyforge
16 ВСЕМ
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.