php объектно-ориентированное программирование - PullRequest
1 голос
/ 05 марта 2011

У меня есть несколько вопросов, касающихся ООП.Я не опытный пользователь, и я сталкиваюсь с проблемой, с которой некоторые могут столкнуться раньше.

В основном я использую MVC для работы с моими проектами php.Я старался сделать класс максимально независимым.Но я думаю, что это довольно сложно.Например:

У меня есть класс Car и User.Пользователь публикует информацию об автомобиле на веб-сайте, возможно, для продажи ...

В классе User у меня есть getUser, в основном, для получения информации о пользователе.

Так что в классе Car я могу использовать setCar, getCar, SaveCar.Для отображения этих автомобилей у меня может быть displayCars ().в displayCars () я могу использовать getCar для получения списка автомобилей.но мне также может понадобиться использовать User :: getUser для получения информации о пользователях, отправивших эти машины.Таким образом, в некотором смысле displayCars зависит от User :: getUser.

Так что мне здесь делать?

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Вам нужно больше, чем просто Автомобили и Пользователи, чтобы смоделировать эту проблему. Концептуально я хотел бы иметь по крайней мере следующее:

  • Каждый отдельный автомобиль должен быть представлен объектом Car
  • Пользователь вводит информацию, которая заполняет атрибуты объекта Car
  • И объект Car, и пользователь, предоставивший этот Car, становятся атрибутами объекта CarDBItem
  • Затем все CarDBItems помещаются в объект CarDB, который управляет всеми машинами, которые введены любым из пользователей

Конечно, это сильно упрощается - будет гораздо больше, чем это, когда вы на самом деле пишете приложение. Но я думаю, что рассмотрение проблемы в этих терминах - хорошее место для начала.

0 голосов
/ 05 марта 2011

Частично ваше замешательство связано с тем, что OO и MVC - это совершенно разные концепции проектирования, и на самом деле они могут быть противоречивыми.Я сталкиваюсь с такими же спорами на работе.

Например, ОО говорит, что только сам класс должен знать, как работает класс, а каждый другой класс должен общаться только со своим интерфейсом.MVC говорит, что вы должны иметь тупые объекты данных (модели) практически без функциональности, а отдельные классы содержат бизнес-логику.

OO говорит, что если вам нужно два класса для одинаковой работы, пусть они наследуют общие функциональные возможности от базового классав то время как MVC обычно предпочитает размещать фасад перед классами, которые вызывают другие классы с реальной функциональностью.

Вы можете комбинировать два, но не в тех же местах или слоях.Вы можете использовать композицию для построения моделей (объектов данных), которые являются надмножествами других моделей, и вы можете использовать наследование для создания аналогичных контроллеров, но должны делать это осторожно.

Веб-приложения хорошо подходят дляMVC, и как уже отмечали другие, существуют установленные рамки, которые вы можете использовать, чтобы направлять вас.

...