Привет.
UPD: просто оставлю это здесь
stackoverflow.com/questions/24381708/default-value...
В своих проектах на Yii2 я достаточно активно использую следующую конструкцию:
use app\models\Dependency;
class Model extends yii\base\Model
{
public $dependencyClass;
public function __construct($config = [])
{
if (!isset($config['dependencyClass'])) {
$this->dependencyClass = new Dependency();
}
parent::__construct($config);
}
}
тут Model это модель, а Dependency это какая-то зависимость, например ассоциированный класс.
Дальше в классе, если нужно использовать зависимость, то обращаюсь к $this->dependencyClass, например:
public function getDependencies()
{
return $this->hasMany($this->dependencyClass->className(), ['modelId' => 'id']);
}
Привычка использовать такую конструкцию появилась достаточно давно и в целом идея была в том, чтобы:
а) собирать все зависимости в одном месте (конструктор класса), а не раскидывать вызовы по всему классу;
б) иметь "дефолтную" зависимость, которая бы подключалась если зависимость не передана в конструктор явно;
в) иметь возможность заинджектить зависимость, что здорово помогает например в юнит-тестах (там я делаю зависимости моками).
Вот просто хотел спросить совета, возможно в такой реализации есть какие-то антипаттерны и вообще запашок и перечисленные подходы можно реализовать как-то более по-другому?
Спасибо.