CRUD и OOD. Как к этому подойти?

Пожалуйста, будьте жестоко честны и разберите мою работу на части, если придется.

Итак, я переписываю небольшое веб-приложение, которое я недавно сделал. Причина просто в том, что код стал довольно грязным, и я хочу изучить и применить лучший 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 на данном этапе.

Большое спасибо за ваше время.

5
задан drwww 11 January 2012 в 19:43
поделиться