шаблон нулевого объекта не может решить проблему множественных возвращаемых типов

Иногда пользователи предпочитают не раскрывать семейное положение, что хорошо в моем домене. Таким образом, у меня есть данные, где пользователь состоит в браке или нет, и у меня есть данные, где я не знаю статус. Моя цель — убедиться, что функция проверки семейного положения, как показано ниже, возвращает только один тип данных. Хотя я использую PHP, но я уверен, что это относится к любому языку там.

Это интерфейс

interface MaritalStatusInterface
{
public function status(): ?bool;
}

Это означает, что статус может возвращать true или false, а в некоторых случаях null.
Это была моя реализация.

class MaritalStatus implements MaritalStatusInterface
{
const SINGLE  = 0;
const MARRIED = 1;

private $status;

public function __construct(int $status)
{
if($status !== self::SINGLE && $status !== self::MARRIED)
{
throw new \InvalidArgumentException("Given marital status '$status' is invalid. Marital status should be either single as " . self::SINGLE . " or married as " . self::MARRIED, 7263);
}
$this->status = $status;
}

public function status(): ?bool
{
return ($this->status)?true:false;
}
}

Теперь это нулевой объект, когда я не могу получить данные о семейном положении.

class NullMaritalStatus implements MaritalStatusInterface
{

private $status;

public function __construct()
{
$this->status = null;
}

public function status(): ?bool
{
return $this->status;
}
}

Мой вопрос: я не могу разделить возвращаемый тип объекта Null и функцию статуса реального объекта. Основное преимущество, согласно моему пониманию, в использовании шаблона нулевого объекта состоит в том, что функции более предсказуемы, как если бы это был тип возврата bool, тогда он всегда будет возвращать bool.

Как я могу реорганизовать мой код, чтобы функция

public function status(): ?bool

можно записать как

# for MaritalStatus class

public function status(): bool

а также

# for NullMaritalStatus class

public function status(): null

Это вообще возможно? Конечно, это не будет соответствовать MaritalStatusInterface. Я не уверен, что использование нескольких интерфейсов может решить эту проблему. Или я смотрю на это совершенно неправильно, и нет ничего плохого в том, чтобы иметь возвращаемые значения?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]