Сделал архитектуру своего проекта так, что классы написал под сущности из базы данных. Причем связи в БД это иногда композиция в классах и так далее. Так, например в классе Message могут хранится экземпляры классов пользователей как идентификация кто и кому его отправлял. Много всяких DTO объектов. Сделал я это так, потому что не хочу использовать Eloquent. Мне не нравится что объект может сам себя сохранить в базе данных, сделать еще какую-то фигню ($user->all() ). Для этого у меня есть репозитории: они достают строку из базы данных, передают конструктору класса, и возвращают уже объект который там сам отвечает (инкапсулирует) как за своё состояние, так и за поведение (или генерируют новые). Для меня это очень удобно, а главное укладывается в голове. И порождает меньше зависимостей. Сущности сами по себе. Получается контроллер может дёрнуть сервис, сервис дёргает репозитории и получает сущности (классы). Далее эти сущности как-то взаимодействуют, сервис отправляет их обратно в репозиторий на сохранение в БД.
Вопрос: корректно ли передавать такие объекты во view для чтения свойств? Они естественно приватные (с геттерами), но меня беспокоит что теоретически объект может изменить своё состояние прямо в представлении, вызвав какой-нибудь свой метод. Я пробовал для каждого класса реализовать метод "toArray()" но: 1) постоянные проблемы с типами (репозитории возвращают тогда не объекты а collect) 2) когда объект, то PHPstorm помогает подсказками что удобно, а массив тяжело запомнить 3) в объектах может быть много уровней композиций
Под словом корректно ли я подразумеваю то, что в перспективе для большого и долгого проекта с кучей таблиц, не выйдет ли это когда-нибудь боком (трудно будет отлаживать например).
Вот пример одного такого конструктора класса Message:
public function __construct($userFrom, $userTo, $message, $id = null)
{
$this->id = $id;
$this->userFrom = $userFrom;
$this->userTo = $userTo;
$this->message = (string)$message;
$this->created_at = now();
}