Яйцо-курица в ООП - PullRequest
       18

Яйцо-курица в ООП

1 голос
/ 08 апреля 2009

У меня проблема с куриным яйцом. Я бы тоже хотел реализовать систему в PHP ООП, в которой два класса будут играть важную роль: база данных и журнал. Моя идея состояла в том, чтобы создать соединение с помощью класса Database, который будет иметь открытые методы, например. runQuery (sUpdateQuery), doInsert (sInsert) и т. д. Класс Log будет записывать журналы с помощью общих методов так же, как logMessage (сообщение), logDatabaseQuery (sQuery) в базу данных. Проблема наступает сейчас.

1: Внутри методов класса Database я хотел бы иметь возможность использовать logDatabaseQuery (sQuery) класса Log

2: Это все равно не будет большой проблемой, если я не захочу использовать метод doInsert (sInsert) класса Database внутри метода logDatabaseQuery.

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

Для многих людей первой идеей была бы модель Singleton, но я определенно хотел бы использовать другое решение.

Таким образом, будет два класса, которые будут использовать методы друг друга:

База данных doInsert logDatabaseQuery

Log logDatabaseQuery doInsert

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

Есть идеи, как это можно / можно сделать самым приятным, ООП-дружественным способом?

Я думал об общем родительском абстрактном классе или об использовании интерфейсов, но, наконец, не смог найти правильный путь :(

Что я хотел бы знать, так это предложение по правильной иерархии классов

Ответы [ 13 ]

0 голосов
/ 08 апреля 2009

Это хороший кандидат на образец посредника . У вас будет объект, для которого регистратор и база данных будут вызывать различные методы, а этот объект-посредник будет хранить ссылки на регистратор и базу данных и обрабатывать для вас связь.

0 голосов
/ 08 апреля 2009

добавьте необязательный параметр к doInsert $ callerIsLogger = false, затем каждый раз, когда вам нужно сделать doInsert () из вашего регистратора, укажите второй параметр true, и ваш doInsert может проверить эту ситуацию и не вызывать регистратор, когда вызывается регистратором. Какие иерархии? KISS методология пород:)

0 голосов
/ 08 апреля 2009

Создайте перегрузку метода вставки, которая позволяет вставки без регистрации, и пусть ваш класс регистрации использует это. В противном случае ваш дизайн является рекурсивным по определению: зарегистрируйте все вставки БД, выполнив вставку БД.

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