В последнее время я пытаюсь понять шаблон репозитория и как отобразить данные из базы данных в модель домена. Я работаю с ZendFramework и пытаюсь реализовать этот шаблон здесь.
Во многих примерах и пояснениях вы видите примеры для сохранения сущности, подобной этой:
class UserRepository
{
function add(User $user) {
$this->db->save( $user );
}
}
Или получить объект, подобный этому
class UserRepository
{
function findById($id) {
return $this->db->fetchAll()->where('id = ' . $id);
}
}
Я предполагаю, что $ this-> db в репозитории, вероятно, представляет объект tablegateway, задачей которого является перенос данных в базу данных или их получение. Правильный?
И вот что я не понимаю:
Во-первых: почему tablegateway предоставляется объект для сохранения, когда ему действительно нужен массив для вставки в базу данных? Должен ли шлюз в действительности быть тем, кто получает данные от объекта и сохраняет их в базе данных, или это должно быть подготовлено в хранилище?
Во-вторых:
При извлечении объекта, почему возвращение tablegateway обратно к тому, кому нужны данные?
Где происходит сопоставление данных из базы данных (вероятно, в виде массива или объекта-строки) с моделью предметной области?
Это не имеет смысла для меня.
Может быть, $ this-> db вообще не представляет шлюз, и я просто все неправильно понимаю.
Задача ещё не решена.
Других решений пока нет …