Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Используем трейты с пользой

Anna | 29.05.2014 | нет комментариев

На прогре теснее было несколько статей о трейтах и о том, как их применять. Но я пока не видел примеров применения с реальными фреймворками, на которых мы пишем всякий день. Я любитель Symfony2 стека и потому именно на нем я покажу, как дозволено применять трейты с пользой.

Из-за особенности реализации proxy в Doctrine, для всякий модели мы обязаны писать геттеры и сеттеры. Но для чего повторять всякий раз одно и то же? Безусловно всякая сущность имеет id, всякая вторая name и частенько description. Так отчего бы это не перенести в трейты?

namespace Column;

trait Id
{
    /**
     * @var integer
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
}

Сейчас описывая очередную модель нам довольно вписать одну строку, взамен 15.

class Book
{
	use ColumnId;
}

Ну не здорово ли?

Когда мне пришла такая идея — я обнаружил парочку библиотек, от обширно знаменитых KNPLabs .

Все достаточно легко, как применять — описано в README.

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

use NktColumn;

class Book
{
	use ColumnId;
    use ColumnName;
    use ColumnPrice;
    use ColumnDescription;
    use ColumnCreatedDate;

    public function __construct($name, $description)
    {
    	$this->setName($name);
    	$this->setDescription($description);
    	$this->setCreatedDate(new DateTime());
    }
}

Сейчас дозволено добавить парочку уникальных свойств, описать какую-то логику, но код модели не будет раздут.

Таким же методом дозволено описывать базовое поведение связанных сущностей, скажем у меня в плане естьCommentable тип, тот, что разрешает добавлять функционал комментариев к всякий сущности.

Впрочем не все так светло — существует маленькая задача. Если схема данных у вас берется из аннотаций — ее нереально переопределить без Strict Standarts варнинга.

Так либо напротив — на мой взор это дюже увлекательный подход, в первую очередь облегчающий воспринятие кода. Присылайте PRы с вашими Зачастую используемыми свойствами в сущностях, я с удовольствием их добавлю.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB