Пожалуйста, будьте предельно честны, и разорвите мою работу на части, если потребуется.
Итак, я переписываю небольшое веб-приложение, которое я недавно сделал.Причина этого в том, что код стал довольно грязным, и я хочу изучить и применить лучший дизайн ОО.Это приложение должно делать просто CRUD.У меня есть база данных с 3 таблицами, companies
и partners
, которые не имеют отношения друг к другу, и city
, которая имеет отношение 1: n к компаниям и партнерам.Очень просто, правда.Теперь у меня есть несколько вопросов, которые я изложу в конце своего поста.Здесь я просто попытаюсь объяснить:
Мой первый подход состоял в том, что я создал классы company, partner и city, извлек все наборы данных из базы данных и создал объекты из этого:
class company {
private $id = null;
private $name = null;
private $city = null;
//many more attributes
function __construct( $id, $name, $city, [...] ) {
$this->id = $id;
$this->name = $name;
$this->city = $city;
//huge constructor
}
/*
* getters + setters here
*
* no need to paste the partner class as it looks just like this one
*
*/
}
И это все, что сделали эти классы.Я выбрал каждый набор данных из базы данных и сконструировал объекты компании, партнера и города (город атрибутов в этих классах сам является объектом с несколькими атрибутами) и сохранил их в два массива arr_companies
и arr_partners
, которые затем содержали эти объекты.... и это работало нормально, как это.
Теперь мне нужно обновить, вставить, удалить в базу данных, и все 3 класса (город, компания, партнер) нуждаются в этой функции.Мой подход состоял в том, что я создал новый класс с конструктором, который будет в основном принимать команду и объект из двух строк, например ('update', 'company')
, и затем обновлять компанию непосредственно в базе данных, оставляя мои объекты нетронутыми.Это очень огорчило меня, потому что у меня были такие хорошо сконструированные объекты, и я не знал, как их использовать.
Вопросы:
Это плохо дляесть такие огромные конструкторы (мой самый большой из них будет принимать 28 параметров)?
Если у вас есть отдельный класс для операций с базой данных или лучше иметь абстрактный класс или интерфейс для него и позволить подклассам самим обрабатывать обновление, удаление, вставку?
Распространено ли просто писать, удалять из базы данных всякий раз, когда я должен или просто применить эти изменения к моим объектам, и выполнять команды к базе данных только позже, например, когда сеанс заканчивается?
Я полагаю, что подобное заявление должно было быть сделано фантастическим разом раньше.Какой правильный подход здесь?создавать объекты, работать с объектами, сохранять их в базе данных?
У меня так много вопросов, но я думаю, что многие из них я просто не знаю, как задать.
Обратите внимание, что, если возможно, я бы не хотел использовать ORM на этом этапе.
Большое спасибо за ваше время.