Как я могу реализовать паттерн Repository or Gateway в Ruby?
Я родом из мира C# и обычно абстрагируюсь от доступа к данным, но с ActiveRecord в качестве механизма доступа к данным по умолчанию в Ruby, не очевидно, как этого добиться.
Что я обычно делаю в C#, так это работаю с абстрактными интерфейсами, а затем имею конкретную реализацию для EFCustomerRepository
, NHibernateCustomerRepository
и InMemoryCustomerRepository
и в зависимости от ситуации ввожу соответствующую конкретную реализацию.
Итак, каков же путь Ruby?!
Насколько я понимаю, в динамических языках вам не понадобится что-то вроде DI (dependency injection). А Ruby имеет мощные языковые возможности, позволяющие использовать такие вещи, как миксины.
Но вы будете определять миксин для использования статически на уровне класса или модуля?
Как мне писать бизнес-логику, если я хочу разрабатывать для хранилища в памяти, а в продакшене перейти на хранилище ActiveRecord?
Возможно, я иду по неправильному пути, поскольку привык думать на статически типизированном языке. Как бы кто-нибудь решил эту задачу на Ruby? В основном я хочу сделать мой слой персистентности абстрактным, а его реализации взаимозаменяемыми.
EDIT: Я ссылаюсь на robert c. martins (unclebob) keynote about architecture
Спасибо за любую помощь...