Я написал гем под названием «cachecataz», который позволяет любому устройству внедрения определять механизм / поставщик кэширования, который они хотят использовать. Вы можете легко использовать одну и ту же методологию, чтобы пользователи могли выбирать между несколькими различными механизмами кэширования.
Я решил определить API как «Провайдер», а затем «API», который определяет, какие методы требуются для любого провайдера. Так выглядят провайдер и API "Rails.cache".
Cachecataz.provider = Rails.cache
Cachecataz.api = {:get => :read, :set => :write, :incr => :increment, :exist? => :exist?}
Это действительно простой способ заставить кого-то выбрать Объект, который отвечает на необходимые методы создателя драгоценного камня. Каждое значение в хеше API может быть символом или объектом, который отвечает на вызов: (например, Proc или лямбда). Затем я просто использую свое внутреннее представление в своем геме (: get,: set,: incr,: exist?) И ищу объект / метод, который необходимо вызвать для его выполнения во время выполнения:
def make_api_call(method, *args)
if Cachecataz.api[method].respond_to?(:call)
Cachecataz.api[method].call(*args)
else
Cachecataz.provider.send(Cachecataz.api[method], *args)
end
end
Это не весь код, но он достаточно близок, чтобы проиллюстрировать, как быстро вы можете внедрить подключаемый API кэширования в свой собственный гем и поддерживать множество механизмов / провайдеров кэширования. Cachecataz с открытым исходным кодом и на github, если вы хотите просмотреть код, он довольно короткий и задокументированный.