Шаблон Repository или Gateway в Ruby

Как я могу реализовать паттерн 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

Спасибо за любую помощь...

8
задан Flip 24 January 2017 в 17:13
поделиться