Как грамотно связать классы Products, Users, Orders для приложения на php?
Задача - простейший телеграмм бот в котором при команде start - бот создает запись в таблицу User, в которой есть колонки id*, username, city, product, payment, order, order_status. Если user с таким id уже есть, просто апдейтится его юзернейм, остальные поля NULL по дефолту. ID и username я беру с апи.
Далее пользователю предлагается выбрать город, который выбирается с таблицы products, в которой столбцы: id, city, product_name, price, product_link, buyer. Товар - product_link, a buyer - по умолчанию NULL, но после продажи будет вносится user_id.
Когда пользователь отвечает какой город его интересует - в таблице users в строке с его ID поле city - апдейтится, дальше предлагается выбрать товар, по той же схеме заполняем поле product в таблице user. Также далее происходит с оплатой. После чего юзеру предлагается оплатить заказ, который формируется в третей табличке orders с полями: order_id, user_id, product_id, date_create, date_close, status. Крон курлит каждые 2 минуты все заказы которые не просрочились, проверяет оплату и если оплата прошла успешно - обновляет date_close и status, а также buyer в таблице товара и order_status в таблице пользователя. После чего - курлит ссылку товара, и товар уходит клиенту.
Так вот суть вопроса: Вот это вот всё - я достаточно быстро в спешке сделал в одном файле (ну и конфиг с доступами отдельно заинклюдил), и конечно спагетти-код который получился работал себе спокойно, а я уже и забыл про этого бота. Прошло пол года, и его нужно доработать... В том виде что он есть сейчас - поддерживать его нереально, потому решено провести рефакторинг и сделать по канонам ООП. Но я в этом слаб, и башка просто пухнет с этого всего.
Подскажите, как лучше это всё дело зарефакторить? Какие классы создавать?
PS: на вскидку создал классы Products, Users, Orders, Db, Bot. В Db - у меня лежит приватный PDO коннект, и методы манипуляции с базой (все SQL запросы). Bot - Держит только два метода - checkMessage и sendMessage. У класса юзер, продукт и заказ - свойства как колонки таблиц, Но методы манипуляций с ними лежат в Db. И я не могу это всё собрать в кучу. Обьясните на пальцах примерно какая должна быть архитектура этого всего балагана?)
Ну явно из дб убрать методы, которые нужны в других классах, а передавать им дб в конструктор и сохранять в свойстве, и из этого свойства уже работать с бд, в нужных классах
FanatPHP, наоборот) с одного файла разбить на несколько по меньше.
Я не знаю почему, но вынес все запросы в класс Db, и подключение к базе сделал приватным. Все выборки работают.
В класс юзера положил все свойства, добавил геттеры и сеттеры на них. Но кто кого должен наследовать или создавать объекты в индексе параллельно - не знаю.
По поводу MVC - сколько в движках типа opencart не шарился, наблюдал что все запросы это модели а логика в контроллере. Вьюшка - это класс Bot - который рендерит ответ на колбек методом sendMessage().
Если я все методы для выборок на sql перенесу Юзеру и передам или наследую ему коннект к базе - это не повлияет на безопасность?
Как бы вы всё разложили?
"движки опенкарт" не имеют с ООП, программированием, и мвц ничего общего
это та самая война и мир, которую напечатал миллион обезьян
мвц - это вся логика в модели, а контроллер - это подай-принеси: взять данные снаружи, обратиться к модели, получить ответ, вернуть его.
у тебя твой бот это контроллер
но вообще твое отношение, что "ну щас я на форуме поспрошаю 5 мин и все сделаю зашибись" это немного несбыточные фантазии. тебе только на то чтобы понять чем вью отличается от контроллера, пара лет понадобится
так что делай как есть
FanatPHP, я не думаю что пойму ооп за 5минут на хабре. Я учил программирование самостоятельно, больше года, при этом работая в ларьке без выходных по 12 часов. Ещё 5 лет я уже работаю в it и учусь каждый день. Наоборот, я писал что ищу годные источники (книги/видеокурсы) по проектированию. Гугл выдаёт одну воду и кал... Возможно, однажды, прийдется создать самому такое руководство, раз такое дело(
Штудирование мануалов на php.net по этой теме результат не дал. :-(
Так и знал что кто-то напишет про ORM или готовые фреймворки для бота. :-) Но я для себя решил разобраться в проектировании архитектуры и ООП. Задача не сильно объемная, и усложнять её разбираясь в ORM, как по мне, совет "так себе". Я ищу ответ на вопрос "как научится создавать грамотно архитектуру?", и надеюсь на совет бывалых программистов в вопросе "как к этому подходить?", "как лучше это связать и почему?"
В гугле один шлак... Странно что в инете нет гайдов "как продумывать проекты наперед, с чего начинать и как двигаться к релизу что бы не запороть дедлайн, и при этом чтобы код был аккуратен"... Может есть книги/видосы какие-то толковые на эту тему?
Nikita Undefined, но как правильно сказано выше, некоторые из этих шаблонов покажутся тебе "усложнением". от себя добавлю: "правильно" - это не синоним "просто".
Антон Шаманов, да, Ваш вариант для ленивых мне очень помог, большое спасибо! Если можешь, оформи это как ответ на вопрос и я выберу его как решение. Спасибо!