On Github niquola / clean-architecture-slides
Created by niquola / @niquola hospital-systems/waveaccess 2013
это прекрасный инструмент для быстрого создания веб-приложений!
укладывается в моделях
и модель не лопнет при этом
Преждевременное моделирование не укусит
Моделировать сложно и исправлять модели болезненно
All problems in computer science can be solved by another level of indirection... Except for the problem of too many layers of indirection.
Выносим за скобки контроллеры и вьюхи
Создаем новый слой - Use Cases
Он будет координировать взаимодействие с пользователем
можно посылать сообщения комманды и запросы
Важнее то как система себя ведет, нежели то как она устроена
Последовательность взаимодействий с системой направленная на достижение цели
Взаимодействия с системой = вызов методов
system.identification_use_case.tap do |s| confirmation_key = nil s.listen :sign_up do |ev| confirmation_key = ev.confirmation_key end s.sign_up!(email, password) s.confirm!(confirmation_key) session_key = s.sign_in!(email, password) s.session_active?(session_key).should be_true s.sign_out!(session_key) end
system.identification_use_case.tap do |s| confirmation_key = nil s.listen :sign_up do |ev| confirmation_key = ev.confirmation_key end s.sign_up!(email, password) s.confirm!(confirmation_key) session_key = s.sign_in!(email, password) s.session_active?(session_key).should be_true s.sign_out!(session_key) end
Преждевремменное моделирование сложной предметной области
корень множества проблем
good architecture maximizesthe number of decisions not made
Прототипирование
class IdentificationSystem def sign_up(email, password) emit :sign_up, users[email] = { email: email, password: password, confirmation_key: rand(100) status: :not_confirmed } end def users @users ||= {} end end
Мы свели интерфейс нашей системы к ruby объекту
Мы явно видим, что делает система
Мы можем повторно использовать его для разных интерфейсов
Мы можем легко сделать прототип
Мы можем покрыть его специфакацией/контрактом
Мы можем менять реализацию
Эти идеи в активной разработке
Интересуйтесь и подключайтесь!
join on githubСпасибо за внимание
Вопросы?