Пожалуйста, будьте жестоко честны и разберите мою работу на части, если придется.
Итак, я переписываю небольшое веб-приложение, которое я недавно сделал. Причина просто в том, что код стал довольно грязным, и я хочу изучить и применить лучший OO дизайн. Что должно делать это приложение, так это простой CRUD.
У меня есть база данных с 3 таблицами, компании
и партнеры
, которые никак не связаны друг с другом и город
, который имеет отношение 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
*
*/
}
И это все, что делали эти классы. Я извлекал каждый набор данных из базы данных, создавал объекты company, partner и city (атрибут city в этих классах является объектом с несколькими атрибутами) и сохранял их в два массива arr_companies
и arr_partners
, в которых затем хранились эти объекты... и так все прекрасно работало.
Теперь, что я хотел, это обновлять, вставлять, удалять в базе данных, и все 3 класса (город, компания, партнер) нуждаются в этой функциональности. Мой подход заключался в том, что я создал новый класс с конструктором, который в основном принимает 2 строки command и object, например, ('update', 'company')
и затем обновляет компанию непосредственно в базе данных, оставляя мои объекты нетронутыми. Это меня очень расстроило, потому что у меня были такие красивые объекты, а я не знал, как их использовать.
Вопросы:
Плохо ли иметь такие огромные конструкторы (мой самый большой принимает 28 параметров)?
Нужно ли иметь отдельный класс для операций с базой данных? или лучше иметь абстрактный класс или интерфейс для этого и позволить подклассам самим обрабатывать update, delete, insert?
Это обычное дело - просто записывать, удалять из базы данных каждый раз, или я должен просто применить эти изменения к моим объектам и выполнить команды к базе данных только позже, например, когда сессия закончится?
Я думаю, что приложение, подобное этому, должно быть сделано фантастиллион раз прежде. Каков здесь правильный подход? Создавать объекты, работать с объектами, сохранять их в базе данных?
У меня так много вопросов, но я думаю, что многие из них я просто не знаю, как задать.
Пожалуйста, обратите внимание, что если возможно, я бы не хотел использовать ORM на данном этапе.
Большое спасибо за ваше время.