@OneTwoThreeFourFive

Вопрос про модели и репозиторий php?

Я читал и смотрел видео уроки, и понял, что надо делить код на несколько классов. Например, класс User это модель, которая содержит в себе свойства id, email, etc. В этом классе нельзя реализовывать методы save (сохранить в базу данных), getByID, etc. Эти методы надо реализовывать в классе UserRepository.

И в этом месте вопросы. Репозиторий может иметь переменную массив, в которую складывать объекты. Теперь это похоже на коллекции. Но коллекции не могут сохранять (менять) данные в базе данных. Я не до конца понимаю как использовать коллекции и репозитории (смысл понятен, но что и когда использовать непонятно). Иногда в примерах используют всё вместе и добавляется ещё active records. Подскажите пожалуйста самый простой вариант реализации (представления простых данных из базы данных в объект в простом проекте, кто может сохранять в базу данных, кто может от туда взять и сделать объект, ведь репозиторий не может создавать объекты, как пишут в статьях) для обычной cms, который соответствует SOLID. Можете без примера кода. Просто логику действий.

И просто вопросы.
Может ли сам репозиторий делать изменения в базе данных?
Может ли модель делать изменения в базе данных (сохранять)?
Может ли модель иметь метод getByID и устанавливать все свойства в соответствии с базой данных (id, email, etc), и возвращать саму себя, чтобы это были не просто данные, а объект (return this) или это должен делать репозиторий?
Может ли репозиторий создавать объект на основе полученных данных (return new User)?
  • Вопрос задан
  • 489 просмотров
Пригласить эксперта
Ответы на вопрос 3
Если тут так и не будет лаконичного объяснения - советую поискать
ответы на эти вопросы в книге:
Implementing Domain Driven Design, Vaughn Vernon
Там есть целые разделы посвященные как моделям так и репозиториям.
Ответ написан
Комментировать
@tukreb
На ваш вопрос, если полностью разжёванный ответ:
https://elisdn.ru/blog/104/domain-entities-modelling

Да и вообще советую полистать там сайт, очень много подробной информации с отличными примерами.
Ответ написан
Комментировать
php666
@php666
PHP-макака
В этом классе нельзя реализовывать метод getByID
нужен и должен быть., это геттер, его суть - отдать свойство. А само свойство(а) класса нужно делать закрытыми.

В этом классе нельзя реализовывать методы save (сохранить в базу данных)
нет никакой правильной точки зрения. почему нет?

abstract class Repo {
   public function save($model) {


class UserRepo extends Repo

class User extends Model {
  public function save($model) {
    $this->repository->save($model); // или
    $this->repositoryManager->getUserRepository()->save($model);


Репозиторий может иметь переменную массив, в которую складывать объекты
зачем туда что-то складывать? Его цель - принять модель/модели и сделать CRUD

Подскажите пожалуйста самый простой вариант реализации
https://nixsolutions.github.io/design-patterns/str...
Ответ написан
Ваш ответ на вопрос

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

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