В основном из любопытства, я ищу фреймворк или пример Python для шаблона репозитория логики переноса развязки из логики домена.
В столбце "" Untangle Domain and Persistence Logic with Curator "появляется название" шаблон хранилища ". Идея исходит от < раздел href=" http://domaindrivendesign.org/node/123 "rel=" noreferrer " > в книге" Управление доменом "и Мартин Фаулер, Класс модели не содержит логики постоянства, а приложение объявляет подклассы репозитория, экземпляры которых действуют как коллекции памяти экземпляров модели. Каждый репозиторий сохраняет модель по-разному, например, SQL (различные схемы), Riak или другой noSQL и в память (для кэширования). Рамочные соглашения означают, что подклассы репозитория обычно требуют минимального кода: просто объявление подкласса" WidgetRepository "SQLRepository предоставит коллекцию, которая сохраняет модельный виджет в таблице БД с именем" виджеты" и сопоставляет столбцы с атрибутами виджета.
Отличия от других шаблонов:
Активный шаблон записи: например, Django ORM. Приложение определяет только класс модели с логикой домена и некоторыми метаданными для сохранения. ORM добавляет логику сохранения в класс модели. Это смешивает домен и персистентность в одном классе (нежелательно по сообщению).
Благодаря @marcin я вижу, что, когда Active Record поддерживает различные функции backend и .save(using = "other_database" ), это дает многогранное преимущество шаблона репозитория.
Итак, в некотором смысле шаблон хранилища похож на Active Record с логикой персистентности, перемещенной в отдельный класс.
Шаблон сопоставления данных: например, SQLAlchemy Classical Mappings. Приложение определяет определяет дополнительные классы для таблицы (ов) базы данных и сопоставления данных от модели к таблице (таблицам). Таким образом, экземпляр модели может быть сопоставлен с таблицами несколькими способами, например. для поддержки устаревших схем. Не думайте, что SQLAlchemy предоставляет mappers для хранения, отличного от SQL.