Теперь, когда я прочитал очень много сообщений, статей, вопросов и ответов об ООП, MVC и шаблонах проектирования, у меня все еще есть вопросы о том, как лучше всего построить то, что я хочу создать.
Моя маленькая структура построена в стиле MVC. Он использует smarty в качестве средства просмотра, и у меня есть класс, настроенный как контроллер, который вызывается из URL-адреса.
Теперь я думаю, что заблудился в части модели. Я мог бы смешивать модели и классы/объекты слишком много (или слишком мало).
Во всяком случае пример. Когда цель состоит в том, чтобы получить список пользователей, которые находятся в моей базе данных:
приложение вызывается, например. «users/list» Затем контроллер запускает список функций, который открывает экземпляр класса «user» и запрашивает этот класс для извлечения списка из таблицы. после возврата контроллеру контроллер отправляет его в средство просмотра, назначая набор результатов (массив) шаблону и устанавливая шаблон. Затем пользователь щелкнет строку в таблице, которая сообщит контроллеру, например, запустить «user/edit», что, в свою очередь, создаст форму и заполнит ее пользовательскими данными для редактирования.
Все идет нормально.
прямо сейчас у меня все это объединено в один пользовательский класс, так что этот класс будет иметь функцию создания, getMeAListOfUsers, обновление и т. д. и такие свойства, как hairType и NoseSize. Но правильный дизайн oop хотел бы, чтобы я отделил «пользователя» (с такими свойствами, как имя пользователя, большой нос, вьющиеся волосы) от «получить список пользователей», что больше похоже на «класс менеджера пользователей».
Если бы я реализовал класс менеджера пользователей, как бы это выглядело? должен ли это быть объект (нельзя сравнивать его с реальным миром) или это должен быть класс только с общедоступными функциями, чтобы он более или менее выглядел как набор функций.
Должен ли он возвращать массив найденных записей (например: array([0]=>array("firstname"=>"dirk", "lastname"=>"diggler"))
или он должен возвращать массив объектов.
Все это все еще немного сбивает меня с толку, и мне интересно, может ли кто-нибудь дать мне небольшое представление о том, как лучше всего подойти к этому.