Политика невмешательства Как в tulp.ru решена задача сохранения изменений состояния системы.

Презентация:



Advertisements
Похожие презентации
Towards creation of unified computerized university management system: problems and solutions V.V. Tryhuk Brest State University named after A.S. Pushkin,
Advertisements

© 2006 Cisco Systems, Inc. All rights reserved. CIPT1 v Administration of Cisco Unified CallManager Release 5.0 Performing General Administration.
BoardgameMaster G2 chapter 1 Технологии Архитектура Клиент-Сервер Архитектура BGM Инструменты Dominion.
ЗАДАЧА Е: АДМИНИСТРИРОВАНИЕ Выполнили: Асадуллина А.Ф., Алексеева Е. А.
Spring Framework Module 3 – AOP. 2 Spring Framework :: AOP :: Example class UserService { public UserDTO getUser(Integer id) { UserDTO user = userDAO.getUser(id);
Microsoft TechDays Заграничнов Александр Microsoft.
Расширение функциональности с использованием метаданных и аспектно-ориентированного программирования Александр Межов ОАО ЧЭМК
Evgeniy Krivosheev Andrey Stukalenko Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 3 – AOP.
Using Dreamweaver MX Slide 1 Window menu Manage Sites… Window menu Manage Sites… 2 2 Open Dreamweaver 1 1 Set up a website folder (1). Click New…
Drupal 7 Deploy (делаем Deploy нового функционала проще) Anton Ivanov.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Configuring Cisco CallManager Express.
ИСЧИСЛЯЕМЫЕ И НЕИСЧИСЛЯЕМЫЕ СУЩЕСТВИТЕЛЬНЫЕ. ИСЧИСЛЯЕМЫЕНЕИСЧИСЛЯЕМЫЕ -Существительные, которые можно посчитать. -Существительные, которые нельзя посчитать.
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
Збери слово Вивчені букви – а,у,о,и,і,м,н,в,л,с,к,п,р,т Частина перша Автор. Головач Маргарита.
Overview of the Paysonnel CE. Overview Paysonnel CE Go to URL- 1 Click [Login to Paysonnel CE] 2 How to Log-in to Paysonnel CE 1 2.
Ruby, язык программирования. RuPy.ru, Омск 2007.Ruby, язык программирования. RuPy.ru, Омск 2007.
Numerical RG analysis of SOC in Low Temperature Creep S. I. Zaitsev IMT RAS, Chernogolovka, Russia
© 2006 Avaya Inc. All rights reserved. The IP Office Manager Tool.
Создание модели лайнера в Solid Edge.
Copyright DASSAULT SYSTEMES Конструирование деталей из профильных и планарных заготовок Structure Design CATIA Training Упражнения Version 5 Release.
Транксрипт:

Политика невмешательства Как в tulp.ru решена задача сохранения изменений состояния системы

Постановка задачи Состояние системы o Модель А o + Модель B o + Модель C Требуется просматривать o состояние "до" изменения o состояние "после" изменения o служебную информацию (кто, когда,...)

Варианты решения Inline code Callback before_save, after_save Observer paper_trail, act_as_versioned Decorator method_decorators Aspect aspectr, aquarium

Inline code save_before( a, b, c ); change( a, b, c ); save_after( a, b, c ); Загрязняется основная логика Необходимо поддерживать изменения (не катит)

Callback before_save :save_state_before after_save :save_state_after Сохранение состояния 1 модели (не группы) Дополнительный код в моделях

AR::Observer: обычная реализация class UserObserver < ActiveRecord::Observer def after_save(user) … end Сохранение состояния 1 модели (не группы)

AR::Observer: реализация через gem class User < ActiveRecord::Base # команда подключения функционала гема has_paper_trail # acts_as_versioned end Сохранение состояния 1 модели (не группы) Дополнительный код в моделях

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

Aspect

AOP Aspect Advice Join Point Программа … user.set_role("admin") … Aspect class UserAspect < AOP advice User, :set_role, options end

Aspect class Changelog watch UserService, [:approve, :disapprove], { state_before: lambda{ |user_id| … }, state_after: lambda{ … }, state_error: lambda{ … } } end Нет ни единой строчки в моделях/сервисах/etc Все настройки – в одном месте

Выбор AspectR (2002) Aquarium - gem install aquarium

Практика Aquarium – мощный – слишком Упрощение интерфейса – более жёсткие требования – обработка ошибок – спокойный сон после release

Откат в жизни модератора Детальная трассировка изменений У меня все ходы записаны (с) 12ст Легко откатить изменения Долой коррупцию, распил и откаты!

Ссылки - wikipedia - wikipedia - method_decorators - github - rubyforge

ВСЕМ