1Sergey1, хз, никогда веб-разработкой на нем не занимался, один раз пришел в компанию, где заставили на нем работать -- я виртуалку поставил (считай все на Линуксе и поставил), а потом в обед уволился :)
@tmgrom
+ лучше сущности отделить, это может помочь настраивать все сущности в будущем через ORM
разжую -- сейчас у вас скорее всего голые запросы прямо в классе Companies, вы постоянно этот класс меняет, все изменения структуры БД также меняете в этом классе
Далее если бы вы отделили сущности, то можно примерно одинаковую работу вынести в др абстракцию (получение всех элементов, получение одного, получение по фильтру параметров), этим сейчас в современной разработк занимаются ORM,
то есть по сути вам в сущности нужно будет только указать таблицу, к которой сущность привязана, указать связь на др сущности и перечень полей сущности с их типами для валидации... так примерно в Eloquent ORM (от Ларавел)
Как понимаете дальнейшее обслуживание можно сильно облегчить этим (так и сделано в фреймворках)
И как он будет архитектуру объяснять без понимания абстракций?
-- Ну у этого класса и у этого общие методы в этом классе
-- А зачем?
-- Ну так сделано в примере, я откуда знаю, зачем вы тут ИНКАПСУЛИРОВАЛИ забубенили именно эту логику и выделили ее в эту АБСТРАКЦИЮ штуку
Делал примерно похожее, делал акции и правила для акции (2 таблицы)
У акции есть скидка (в процентах или в рублях)
При выборе товара идет выбор подходящих акций по условию (у меня по дате, у вас по времени может быть, и еще по другим параметрам (приоритет, включена или нет) и назначается скидка товару
инструменты от Jetbrains потрясающие