Работаю на Yii2.
Есть модель. Пусть это будет анкета пользователя с множеством различных данных(User).
Есть класс, который в зависимости от данных этой анкеты и формирует, например, размер скидки для пользователя(пусть это будет класс FDiscount).
Вопрос в том как правильно сделать передачу данных в класс?
Я вижу два выхода:
Меня тянет ко второму варианту. Сейчас все работает по первому.
Как будет правильно? Или может быть существует другое решение?
В DDD подходе используется паттерн DTO(Data Transfer Object), суть этого паттерна - создать типизированную структуру для передачи данных.
То есть вы создаете класс, к примеру UserDTO который принимает объект User и берёт только те данные которые вам нужны. И потом вы в своем классе FDiscount принимаете уже UserDTO в котором лежит то что вам нужно. Можете прочитать про этот паттерн и реализовать через него, а так если выбирать из вашего списка - я бы выбрал 2-й вариант.
Я бы не стал делать так, чтобы User знал о FDiscount, а FDiscount о User. Лучше передать в FDiscount просто параметры для формирования, например массив или объект простой.
Если у вас работает метод, в котором надо получить скидку, то в нем получаете User, формируете данные для FDiscount и отдаете в FDiscount.
model, например \app\models\User:
public static function dataForFDiscount($user) {
//что то делается с юзером проверяются наличие заполненности
$discount = 0;
if ($user->emailConfirm) {
$discount += 5;
}
return $discount;
}
controller, например \app\controllers\User (откуда вызываешь):
public function actionDiscount() {
....
$discount = \app\models\User::dataForFDiscount(Yii::$app->user);
....
}
Как то так. Самый простой способ.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости