@Venesuella
BlackJack и ...

Паттерн Repository и Active Record?

Здравствуйте! Встал такой вопрос, разъясните пожалуйста, паттерн Repository содержит только логику работы с объектом выборку и.т.д но без сохранения его в БД, но если в Repository содержаться методы которые сохраняют, удаляют объект, то Repository превращается в Active Record ? поправьте меня, если я где то ошибся
  • Вопрос задан
  • 3422 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Что такое репозиторий? Это что-то что отвечает за хранение данных. Целиком и полностью. То есть вот простенький интерфейс простенького репозитория:

interface UserRepository {
    public User getUser(UserID id);
    public void add(User user);
    public void remove(User user);
}


Где именно репозиторий хранит данные, в базе данных, в памяти, в файлах, на удаленном сервере с запросами через http - это все детали реализации. То есть репозиторий - это паттерн для того, что бы абстрагировать наш код от места хранения данных.

Репозиторий который умеет только выборки делать - это не репозиторий. Это штука для выборок, Finder. Так же мы должны тут заметить, что "строками таблиц" является объект типа User, а репозиторий представляет собой абстракцию от таблицы (очень упрощенно. есть еще паттерн table data gateway который отвечает именно за одну таблицу, репозиторий же может хэндлить и связи между таблицами и вообще оперирует именно объектами предметной области а не их отображением на базу).

Active Record же делает именно то, что говорит название. Это объект, который представляет собой одну строку из таблицы. Он сам может себя вставить, обновить или удалить из таблицы. Однако "найти себя" он не может к примеру, за это отвечает какой-то другой объект (мне нравится название Finder, поскольку это именно то что делает объект - ищет наши строки таблиц). Частенько для упрощения методы файдеров делаются как статические методы.

По сути ActiveRecord есть ничто иное как упрощенная комбинация из Domain Object + Row Data Gateway.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C#
Репозиторий - это хранилище сразу для всех объектов определенного класса. Методы репозитория, добавляющие или удаляющие объект, принимают этот объект в качестве параметра. Методы репозитория, отвечающие за поиск, возвращают экземпляры найденных объектов. У вас один экземпляр репозитория для всех объектов, которые он может хранить (как правило - один экземляр для всех объектов какого-то одного класса или иерархии классов).

В паттерне Active Record объект умеет сохранять сам себя. Иными словами, ответственность за вопросы хранения лежит на самом объекте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы