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 maximizes
the 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Спасибо за внимание
Вопросы?