Правильно ли реализованы классы?
Если не хотите использовать готовое - можете создать своё. Ничего плохого в этом нет. Чаще всего готовое имеет зависимости и не всегда это подходит. Ваша модель напоминает модель yii2. Я думаю, вам будет полезно посмотреть на базовый и основной класс Active Record от Yii2. Надеюсь не видели.

По текущем замечаниям у AR для простоты и быстрой разработки свойства являются публичными и они равны прям в базе данных, что позволяет избавиться от геттеров и сеттеров их выполняют роль публичные свойства, как некое DTO. Так что сами свойства у вас не логично что имеют не публичный доступ.
Если не хотите использовать готовое - можете создать своё. Ничего плохого в этом нет. Чаще всего готовое имеет зависимости и не всегда это подходит. Ваша модель напоминает модель yii2. Я думаю, вам будет полезно посмотреть на базовый и основной класс Active Record от Yii2. Надеюсь не видели.

По текущем замечаниям у AR для простоты и быстрой разработки свойства являются публичными и они равны прям в базе данных, что позволяет избавиться от геттеров и сеттеров их выполняют роль публичные свойства, как некое DTO. Так что сами свойства у вас не логично что имеют не публичный доступ.