Хочу поделиться своей находкой. а может даже узнать что она уже давно используется и есть спец термины для нее. есть иногда потребность создать пораллельное соединение с бд. не знаю как у вас. например, логикой фреймворка предполагается, что весь акшен проходит внутри одной транзакции. если все пройдет ок, она в конце закомитется. но бывают акшены, внутри которых вот надо сейчас именно что-то записать и закомитить, даже если откатится основная транзакция. но основную транзакцию не оборвать, чтобы не сломать общую логику. раньше для этого я делал так: PHP: <?php $paralelConnection= new PDO(...) //вот этот код снаружи от реестра меня очень напрягал $mainConnection= $reestr->setConnection($paralelConnection) //тут делается какой-то код. естесно он через реестр получает паралельное соединение и паралельную транзакцию. она или комитится или ролбечится $reestr->setConnection($mainConnection) потом этот код включил в реестр и у меня получилось PHP: <?php $reestr->setAltConnection() //все тот же код $reestr->setMainConnection(); а недавно допер до такого. добавил в реестр два метода. удобно аж писец не могу не написать PHP: <?php $reestr->pushConnection() //тут все тот же код в параллельной транзакции $reestr->popConnection() методы используют приват массив как стэк для хранения соединений с бд и array_push() array_pop() для работы с ним. что хорошо, можно безопасно писать вложенный код с паралельными соединениями, и количество этих вложений не ограничено
местами читал паттерны, но так чтобы целую книгу не было. а как по науке это делается, паттерн мож какой известный есть?
kostyl про пул не знаю. я знаю только обячный пул соединений, который кэширует их. а другого не нашел. есть где почитать? Когда zf будет наконец на 5.3 можно будет еще проще на замыканиях написать один метод для вообще любого ресурса. Например PHP: <?php $altLog= new Zend_Log(); $altLdap= new Zend_LDAP(); $registry->withResourse('log', $altLog){ //теперь код вместо лога пишет в $altLog $registry->withResourse('ldap', $altLdap){ //код, который пишет в $altLog и читает из $altLdap } } //тут код работает обратно на обычных настройках а внутри withResourse() перед вызовом замыкания в стэк старое значение после замыкания вернуть старое на место и обернуть его еще на всякий случай в try catch и вернуть старое в случае ошибки