|
|
|
|
|
для: mechanic
(06.08.2008 в 13:40)
| | додумалсо, тут можно заюзать паттерн Состояние (State) | |
|
|
|
|
|
|
|
для: Axxil
(06.08.2008 в 13:08)
| | мне кажется нет смысла делать set-методы, которые будут вызываться в конструкторе с захардкоденным параметром ($this->setLogger(new Logger)), легче сразу написать $this->logger = new Logger; или передать $logger в конструктор и присвоить $this->logger = $logger;, а если параметров много?.. не хочется городить мегаконструкторы
смысл то этих методов в том, чтоб вызывать их снаружи, правильно ведь? зачем хардкодить в конструкторе
в общем тут чувствуется затык, и обычно это означает что у кого то проблемы в проектировании, и что на самом деле так никто не делает )
* ушел думать | |
|
|
|
|
|
|
|
для: mechanic
(06.08.2008 в 12:55)
| | Не понял я.
Если вызовы setLogger, setErrorHandler обязательны, то почему их в конструктор не поместить?
Конструктор для этого и придуман, чтобы подготовить объект к использованию. | |
|
|
|
|
|
|
|
для: Axxil
(06.08.2008 в 12:51)
| | но если перед ней надо выполнить setLogger, setErrorHandler и все такое
т.е. смысл инициализации - в законченности объекта, в том, чтоб разрешить использование объекта, только если все эти set-методы выполнены и объект "готов" | |
|
|
|
|
|
|
|
для: mechanic
(06.08.2008 в 12:48)
| | непонятно, что мешает инициализацию в конструктор засунуть? Тогда она гарантировано будет выполнена. | |
|
|
|
|
|
|
| как можно спроектировать класс, чтоб сабж был невозможен?
например $user = new User; пустой объект, если вызвать $user->getName() - будет false
и как бы сразу не поймешь, что забыл вызвать для начала $user->init();, а в каждом методе писать
if(!$this->initialized) {throw new Exception...} неинтересно и неэлегантно
с getName() какой то простой пример получился, а вот в случае посложнее, когда перед использованием нужно сделать $user->setLogger(new Logger); чтоб объект вел логи, недопустимо пропускать инициализацию, ибо это приведет к фаталу при вызове методов несуществующего объекта $this->logger | |
|
|
|
|