Доктрина моделей синглтона - PullRequest
3 голосов
/ 03 июля 2010

Можем ли мы иметь класс модели, который является единственным в Doctrine?

Для классов Singleton у меня должен быть закрытый / защищенный конструктор .... но это невозможно, так как я расширяю класс Doctrine, который имеетоткрытый конструктор

Вы можете поспорить об использовании шаблона Singleton при взаимодействии с БД, но просто рассмотрите следующий сценарий:

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

Кажется, что нет способа реализовать шаблон синглтона длямодели при использовании Doctrine?

Ответы [ 3 ]

7 голосов
/ 03 июля 2010

Экземпляр класса модели Doctrine соответствует одной сущности, например, экземпляр User представляет одного пользователя, и я сомневаюсь, что у вас есть только один из них.Поместите другой код в отдельный класс, UserManager или что-то еще.

class Logger { // plain old singleton class

    function log(x) {
        entry = new LogEntry(x); // LogEntry extends Doctrine_Model
        entry.save();
    }

}
1 голос
/ 03 июля 2010

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

0 голосов
/ 03 июля 2010

Ваша проблема не в Doctrine, а в PHP, который не имеет состояния (да, есть некоторые методы хранения объекта, подобные состоянию).Следовательно, вы не можете иметь больше одного объекта за раз.

...