Можно ли встраивать объект базы данных? - PullRequest
2 голосов
/ 01 августа 2011

У меня есть следующие таблицы данных: пользователи, user_pictures, сообщения, форум. Чтобы очертить его структуру:

forum
users
 user_pictures
 messages

, так как если нет пользователей, ни user_pictures ни сообщения. Теперь я хочу, чтобы эта структурированная логика была встроена в мои классы. Я использую отдельный класс для каждой таблицы, чтобы выполнять действия в соответствии с таблицей. Обычно это будет выглядеть так:

$forum = new Forum();

$users = new User();

$messages = new Message();

$user_pictures = new User_picture();

но что, если я создаю сообщения и user_pictures в конструкторе пользователей? И это ссылка тоже будет там. Это нормально?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

но что, если я создаю сообщения и user_pictures в конструкторе пользователей?

Вы не должны создавать что-либо в ctor. Это будет делать работу в ctor и смешивать граф создания с графом коллаборации. Если вы хотите собрать сложный граф объектов, используйте шаблон Builder или Factory. Если вам нужно создать что-то в соавтора, передайте экземпляр фабрики или строителя соавтору. Но не выполняйте работу в конструкторе.

Что касается оставшейся части вашего вопроса: на этот можно ответить так же, как и на ваш предыдущий вопрос . Используйте пользовательский DataMapper и / или репозиторий и / или ORM. Не смоделируйте свои классы после вашей структуры RDBMS.

0 голосов
/ 01 августа 2011

Ваша логика будет зависеть от того, что на самом деле представляют собой $ messages и $ user_pictures. Это сообщения и картинки только для этого пользователя или форумы?

Если это первый случай, то $ messages и $ user_pictures должны быть подклассом $ user, поскольку они связаны с этим классом. Если это позже, то они должны подкласс $ форум. Если они не связаны, то все они должны быть своими собственными классами.

Если вы собираетесь подклассить $ users с $ messages и $ user_pictures, я бы создал метод для объекта user для доступа к этим подклассам. Что-то вроде $ user-> get_messages для получения сообщений, связанных с этим пользователем, то же самое для изображений пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...