Разделение проблем в Zend Framework 3

В настоящее время у меня есть некоторые проблемы, чтобы понять, как я должен отделить свои сущности и методы (я использую Zend Framework 3 и Doctrine).

Допустим, у нас есть следующие классы:

class Ticket{
private $optionBundle;
private $createdAt;
private $currentUserCount;
}

class OptionBundle{
private $price;
private $options;
}

abstract class Option {
abstract public function isExpired($val);
}

class RuntimeOption extends Option{

private $runtimeInDays;

public function isExpired($startDate) {
$today = new DateTime();
$expirationDate = $startDate->modify('+'.$this->runtimeInDays . ' days');
return ($today >= $expirationDate)
}
}

class LimitOption extends Option{
private $limit;
public function isExpired($currentValue) {
return $currentValue >= $this->limit;
}
}

Мой нынешний подход основан на предположении, что очень общие параметры приведут к меньшим издержкам на базу данных. Я бы просто имел несколько OptionBundles с различными комбинациями Option и мог бы применить их к каждому билету.

Чтобы определить, истек ли срок действия runtimeOption для конкретного билета, мне нужно передать дату билета в $ createAt методу isExpired () в RuntimeOption. То же самое с $ currentUserCount и LimitOption.

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

Также:
Я хочу иметь возможность создавать новые варианты с минимальными усилиями в будущем. В настоящее время мне нужно будет создать новый класс параметров, добавить необходимое значение в мой класс заявок и каждый существующий билет в базе данных и изменить метод, который определяет, является ли билет сроком действия. Или я должен создать еще один слой конкретных TicketOptions, который знает точное значение, необходимое для билета?

0

Решение

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

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

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

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