Необязательные параметры по запросу класса - PullRequest
0 голосов
/ 24 октября 2019

Как правильно обрабатывать необязательные параметры в запросе на обслуживание?

Допустим, в этом сценарии я также хочу иметь $title в качестве необязательного параметра

<?php
namespace Lw\Application\Service\Wish;
class AddWishRequest
{
    private $userId;
    private $email;
    private $content;

    public function __construct($userId, $email, $content)
    {
        $this->userId = $userId;
        $this->email = $email;
        $this->content = $content;
    }

    public function userId()
    {
        return $this->userId;
    }

    public function email()
    {
        return $this->email;
    }

    public function content()
    {
        return $this->content;
    }
}

Пример из здесь

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Обычно в DDD и, следуя правилам чистого кода, также, если у вас есть необязательные параметры, у вас есть несколько конструкторов, в данном случае два:

  • Один только для обязательных аргументов.

  • Один для всех аргументов, включая необязательный, но в этом конструкторе он также будет обязательным.

Если вы хотите построить объект без необязательного аргумента, вы вызываете первый. И если вы хотите указать необязательный необязательный аргумент, используйте второй.

Обычно вы должны использовать фабричные методы со значимыми именами и скрывать конструкторы.

AddWishRequest.create (userId, email, content)

AddWishRequest.createWithTitle (userId, email, содержание, заголовок)

0 голосов
/ 24 октября 2019

Вы можете использовать необязательные аргументы в любом вызове функции, а также в конструкторе. Лучше всего, если перед get получено значение get.

public function __construct($userId, $email, $content, $title = "")

означает, что $ title является необязательным аргументом. Если он не указан, он задается пустой строкой. Вы также можете указать любой другой тип или значение.

namespace Lw\Application\Service\Wish;
class AddWishRequest
{
    private $userId;
    private $email;
    private $content;
    private $title;

    public function __construct($userId, $email, $content, $title = "")
    {
        $this->userId = $userId;
        $this->email = $email;
        $this->content = $content;
        $this->title = $title;
    }

    public function getUserId()
    {
        return $this->userId;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function getContent()
    {
        return $this->content;
    }

    public function getTitle()
    {
        return $this->title;
    }

}

Обновление

Если вы просто объявите свойство типа

private $property

, то получите доступчерез $this->property всегда будет нулевым (пока вы не установите значение). Вы должны сделать так, чтобы получатель отвечал за возвращение правильных значений.

В следующем примере всегда будет возвращаться массив, использующий оператор NULL-coalesce:

  • , если $ что-то истинно (илиимеет содержимое массива) вернет $ что-то
  • иначе вернет пустой массив
public function getSomething() : array {
  return $this->something ?? [];
}
...