Где должен находиться метод

Обсуждаем, как правильно строить приложения
Ответить
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Где должен находиться метод

Сообщение anton_z »

Не могу распределить обязанности. Вопрос нубский. Прошу помощи.
Есть система баннерной рекламы. Админка. Баннеры можно продлевать до определенного лимита (макс 90 дней).
Где должен находиться метод проверки этого лимита? Лимит сейчас объявлен константой в сущности баннера, в дальнейшем планируется создать панель настроек и данный лимит будет доставаться из БД. При проверке учитывается текущий срок размещения (дата окончания), состояние баннера (активен, в архиве, заблокирован и пр.) и лимит.

Код: Выделить всё


$banner->couldBeProlongedFor($days);

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Где должен находиться метод

Сообщение anton_z »

Если оставлять проверку с константой в сущности, в дальнейшем можно будет вытаскивать значение лимита используя паттерн "Окружающий контекст" (Ambient Contex) https://smarly.net/dependency-injection ... nt-context. Он похож на синглтон Что думаете по поводу применения данного паттерна для этой задачи?

Код: Выделить всё


class BannerContextManager {
	
	private static $context;
	
	public static function getContext() {
		if (self::$context == null)
			self::$context = new BannerContext;
		return self::$context;	
	}
	
}

class Banner {
	
	public function couldBeProlonged($days)
	{
		if (BannerContextManager::getContext().getLimit() > ...)
	}

}

Альтернатива - доменный сервис для проверки BannerProlongationChecker. Данный сервис будет иметь зависимости для доступа к настройкам и выполнения любых проверок.

Код: Выделить всё


class BannerProlongationChecker {

	private $limit;
	
	public function __construct($limit) {
		$this->limit  = $limit;
	}
	
	public function couldBeProlonged(Banner $banner, $days) {
		...
	}

}



Какой вариант предпочтительнее?
Последний раз редактировалось anton_z 2017.03.06, 15:46, всего редактировалось 2 раза.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где должен находиться метод

Сообщение ElisDN »

Предпочту:
anton_z писал(а): 2017.03.06, 15:38 Альтернатива - доменный сервис для проверки BannerProlongationChecker. Данный сервис будет иметь зависимости для доступа к настройкам и выполнения любых проверок.
Ответить