27 марта 2010 г.
Санкт-Петербург
27 марта 2010 г.
Санкт-Петербург
Изменения в архитектуре
Во многих компонентах в методе setOptions часто встречается повторяющийся код:
Изменения в архитектуре
Контрактное программирование
Изменения в архитектуре
Уменьшение количества синглтонов
Изменения в архитектуре
Пространства имен
Изменения в архитектуре
Использование goto
Изменения в плагинах
Изменения в плагинах
Проблемы с плагинами
Изменения в плагинах
Рекомендации: именование плагинов
interface Validator
{
public function isValid($value, $context = null);
public function __invoke($value, $context = null);
}
class FooValidator implements Validator
{
public function isValid($value, $context = null)
{
// ...
}
public function __invoke($value, $context = null)
{
return $this->isValid($value, $context);
}
}
class ValidatorFactory
{
public static function factory($options)
{
if ($options instance of \Zend\Config) {
$options = $options->toArray();
}
if (!is_array($options)) {
throw new InvalidArgumentException();
}
$adapter = new $options['type'];
$adapter->setOptions($options['params']);
return $adapter;
}
}
Фабрики должны иметь связанный с ними загрузчик плагинов и позволять подключать другие загрузчики.
Изменения в плагинах
Рекомендации: цепочки (Chains)
Новая реализация MVC
Zend_Controller 2.0
Zend_Controller 2.0
Event-driven Model: PubSub
Zend_Controller 2.0
Event-driven model
Определяется 4 состояния :
Zend_Controller 2.0
Дополнительные компоненты
Zend_Controller 2.0
Последствия
Zend_Controller 2.0
Poka Yoke фильтрация
Zend_Controller 2.0
Список изменений в Action Controller
//вызов через HelperBroker
$this->_helper->redirector('index');
//превратится в
$this->redirector('index');
//доступ к свойствам
$this->_helper->viewRenderer->setNoRender(true);
//станет таким
$this->viewRenderer->setNoRender(true);
Zend_Controller_Router 2.0
Zend_Controller_Router 2.0
Изменения в маршрутах
Zend_Controller_Router 2.0
Chains
Zend_Controller_Router 2.0
Поддержка кэширования
Zend_Form 2.0
Zend_Form 2.0
Рекомендации: рефакторинг view helpers
Zend_Form 2.0
$element->setOptions(array(
'size' => 25,
'maxlength' => 140,
'class' => 'form-text',
));
echo $view->formText($element);
// Учитывая, что Zend\Form\DecoratorChain
// наследует Pubsub\FilterChain
// и что render() переадресует на filter():
$chain = new Zend\Form\DecoratorChain();
$chain->subscribe('Zend\Form\decorator\Label');
$chain->subscribe('Zend\Form\decorator\ViewHelper');
$chain->subscribe('My\Decorator\Div');
$chain->setView($view);
echo $chain->render($element);
$chain = new Zend\Form\Decorator\DefinitionListChain;
$chain->setView($view);
echo $chain->render($element);
Zend_Form 2.0
Рекомендации: использование PubSub
$vChain = new Zend\Validator\ValidatorChain();
$vChain->subscribe('Int');
$vChain->subscribe('MinLength', array(3));
$vChain->subscribe('MaxLength', array(20));
// прекращение валидации на первой ошибке подписчика
$vChain->breakOnFailure(true);
$element->setValidatorChain($vChain);
if ($element->isValid($values)) { … }
$fChain = new Zend\Filter\FilterChain();
$fChain->subscribe('StringTrim');
$element->setFilterChain($fChain);
$newValues = $elemen->filter($values);
Zend_Form 2.0
// Извлекаем ранее созданные цепочки фильтров и валидаторов
// всех элементов формы
$filterChain = $form->getFilterChain();
// Присоединяем к модели:
$model->setFilterChain($filterChain);
Рекомендации: работа с
цепочками фильтров и валидаторов
Рекомендации: работа с
цепочками фильтров и валидаторов
Zend_Form 2.0
Рекомендации: разделение
между метаданными и поведением
$form->setMetadata(array(
'action' => $url,
'method' => 'post',
'id' => 'registration',
));
$element->setMetadata(array(
'class' => 'form-text',
'size' => 25,
'maxlength' => 140,
));
$element->setName('foo');
Zend_Form 2.0
Рекомендации:
отмена установки id, перевод
Zend_Form 2.0
Проблемы обратной совместимости
Zend_Session 2.0
Zend_View 2.0
Другие элементы
GIT вместо Subversion
use \Zend\Filter; // Псевдонимом будет "Filter"
use \Zend\Form\Element; // Псевдонимом будет "Element"
Псевдоним для класса:
или использовать имя класса
или подставлять суффиксом пространство имен класса
// Псевдоним "HelperBroker"
use \Zend\Controller\Action\HelperBroker;
// Добавляя суффикс
use \Zend\Filter\Int as IntFilter;
Стандарты кодирования
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть