Правильно ли передавать нужные объекты аргументами метода? Есть классы Controller и Saver. Контроллер в методе создаёт EntrySaver, передавая ему в конструктор из своих свойств Request и Response. Затем он дёргает разные методы сейвера, после чего (если методы вернули нужные значения) запускает метод $saver->save()... Но! Чтобы сохранить данные (они переданы в объекте Request), сейверу нужны еще два объекта - ObjectFacroty и Assembler. Нормально ли будет передать эти объекты методу ->save() или же надо передавать их в самом начале - конструктору сейвера?class Controller { ... public function add() { ... $saver = new Saver($this->request, $this->response); ... $saver->check(); ... $saver->save($this->p_factory->getObjectFactory(), $this->factory->getAssembler()); ... }
В данном случае, правильнее было бы передавать ObjectFactory и Assembler в конструктор класса Saver, а не в метод save(). В конструкторе можно было бы сохранить эти объекты как свойства класса Saver и использовать их внутри метода save(), не передавая их каждый раз в качестве аргументов.
Примерно так:
class Saver { private $request; private $response; private $objectFactory; private $assembler; public function __construct($request, $response, $objectFactory, $assembler) { $this->request = $request; $this->response = $response; $this->objectFactory = $objectFactory; $this->assembler = $assembler; } public function check() { // выполнение проверок } public function save() { // использование $this->objectFactory и $this->assembler для сохранения данных } } class Controller { public function add() { $saver = new Saver($this->request, $this->response, $this->p_factory->getObjectFactory(), $this->factory->getAssembler()); $saver->check(); $saver->save(); } }
Такая структура кода обеспечивает более чистый и понятный код, где все необходимые зависимости передаются в конструкторе, что делает код более модульным и удобным для тестирования и поддержки.
В данном случае, правильнее было бы передавать ObjectFactory и Assembler в конструктор класса Saver, а не в метод save(). В конструкторе можно было бы сохранить эти объекты как свойства класса Saver и использовать их внутри метода save(), не передавая их каждый раз в качестве аргументов.
Примерно так:
class Saver{
private $request;
private $response;
private $objectFactory;
private $assembler;
public function __construct($request, $response, $objectFactory, $assembler)
{
$this->request = $request;
$this->response = $response;
$this->objectFactory = $objectFactory;
$this->assembler = $assembler;
}
public function check()
{
// выполнение проверок
}
public function save()
{
// использование $this->objectFactory и $this->assembler для сохранения данных
}
}
class Controller
{
public function add()
{
$saver = new Saver($this->request, $this->response, $this->p_factory->getObjectFactory(), $this->factory->getAssembler());
$saver->check();
$saver->save();
}
}
Такая структура кода обеспечивает более чистый и понятный код, где все необходимые зависимости передаются в конструкторе, что делает код более модульным и удобным для тестирования и поддержки.