Я хочу установить начальные значения полей в объекте, используя $ config.Какой подход лучше с точки зрения более чистого и более обслуживаемого кода?Также я хотел бы добавить, что объект будет инициализирован на фабрике, а не напрямую клиентом.
1.Я передаю $ config объекту
<?php
class UserGreeting {
private $config;
public function __construct($config){
$this->config=$config;
}
public function greetings(){
echo 'Hello, '.$this->config->get('username');
}
}
?>
Плюсы:
- Простота передачи нескольких параметров
Минусы:
- Класс связан с $ config (верно?).Я имею в виду, что кроме определенных соглашений об именовании интерфейса и конфигурации $ config, я не могу просто подключить этот класс к другой программе, не вводя $ config
- В коде клиента не обязательно знать, какие параметры используются
объект, но это более общая мысль
2.Я устанавливаю поля вне объекта
<?php
class UserGreetingFactory{
public function __construct($config){
$this->config=$config;
}
public function getUserGreeting(){
$userGreeting=new UserGreeting();
$userGreeting->setUserName='John Doe';
return $userGreeing;
}
}
class UserGreeting {
private userName;
public function setUserName($userName){
$this->userName=$userName;
}
public function greetings(){
echo "Hello, {$this->userName}";
}
}
?>
Плюсы:
Классу все равно, откуда берутся его параметры
Можно легко использовать повторно
Легче тестировать (правда?).Я имею в виду, что мне не нужно иметь дело с настройкой $ config
Минусы:
Factory \ Builder должен знать, какие параметры нужноpass
Множество дополнительного кода для установщиков и параметров передачи