Vitaly
А смысл тогда в АР?)
Andrey
Все очень зависит от того, что именно ты хочешь сделать. Пока что вообще ничего не понятно
Andrey
Ты пытаешься говорить о том, что что-то неподходит и даже рассуждаешь об анемичной модели
Andrey
Но никаких деталей предметной области и бизнес-логики не раскрываешь
Andrey
Так нельзя
Andrey
- Как сложить 2 числа?
- 2 + 2
- Но мне надо переиспользовавть функцию
- Ну засунь в функцию
- Я слышал, что функция из 1 строки - плохо
Vitaly
Andrey
абсолютно нет
Vitaly
Ок, а что у вас в АР лежит? Помимо релейшенов и скоупов?
Maksim (Ellrion)
Ок, а что у вас в АР лежит? Помимо релейшенов и скоупов?
акцессоры, мутаторы, бл
но когда у меня очень жирная модель тот же юзер. то возможно что то (тот же банхаммер к примеру) я вынесу в сервис.
причем возможно я сделаю метод у самой модели который дернет этот сервис передав себя в него.
Vitaly
Это норм. В целом про сервис бана, там все ок, если сервис просто отвечает за то, что нужно например рассылку сделать и ещё какую логику помимо бана. Я к тому, что модель должна уметь сама себя банить. А то, что происходит помимо этого, это уже логика сервиса, или могут лисенеры какие-то быть, которые слушают событие бана. Я думал, ты пропагандируешь вариант с тем, что АР - просто набор релейшенов, скоупов и запись в бд, у которой мы можем дергать поля, т.е. просто структура
Maksim (Ellrion)
Это норм. В целом про сервис бана, там все ок, если сервис просто отвечает за то, что нужно например рассылку сделать и ещё какую логику помимо бана. Я к тому, что модель должна уметь сама себя банить. А то, что происходит помимо этого, это уже логика сервиса, или могут лисенеры какие-то быть, которые слушают событие бана. Я думал, ты пропагандируешь вариант с тем, что АР - просто набор релейшенов, скоупов и запись в бд, у которой мы можем дергать поля, т.е. просто структура
если под "уметь банить себя" мы понимает выставлять значения своих полей соответственным образом, то конечно это метод именно модели, даже при наличии сервиса.
Рад что мы разобрались)
Dmitry
эти споры куда положить логику, наверное уже десятилетия ведутся. Столько статей написано, столько видео снято. И везде примерно одно и тоже мнение. Но всеравно каждый приходит и спрашивает.
Есть простой ответ, если тебе не надо разделение, не делай. Если ты в своем коде через 3 месяца спокойно определяешь где что и как делается, то все норм. Если внесения нового функционала, не вызывает никаких проблем, то все норм.
Иначе ты сам придешь к верному пониманию что и как декомпозировать. По традиции скидываю 2 ссылки :)
http://slides.elisdn.ru/2017/yiiconf-semantic/#/
http://developer.uz/blog/layered-structure-for-yii-app/
Evan
парни какой тип данных использовать для хранения изображения бд ?
Dmitry
Andrey
Dmitry
Evan
Andrey
файловая сисема
Evan
аа
Andrey
если очень много файлов, используй что-то типа aws например
Evan
Vitaly
Раз начали говорить что-то про архитектуру, то ещё накину: где у вас валидация? Только реквест?
Dmitry
Andrey
Evan
Evan
string
я по правильному пути иду ?
Andrey
и страница тоже правильная открыта
Andrey
если в двух словах,
причел файл, сохранил его в storage, путь сохранил в бд
Evan
Dmitry
Vitaly
валидация выделяется в отдельный сервис или в том же сервисе, где ты логику делаешь?
Vitaly
и передаешь ли ты реквест туда? или он дальше контроллера никуда не уходит?
Dmitry
валидация выделяется в отдельный сервис или в том же сервисе, где ты логику делаешь?
слишком отвлеченный вопрос. Например есть подписка на новости, и возможность выбрать категории. Чел ввел свои данные, выбрал категории. Данные пришли валидные. Далее запрос передается в сервис оформления подписки. И там я уже проверяю, может он подписаться на них или нет. Например он выбрал категорию эротика, а ему 14 лет. Я это проверяю и кидаю исключение, типа нет парень не можешь ты на это подписаться. Все эти проверки в сервисе.
Vitaly
а валидации вроде существование этих категорий, то, что категории уникальны - на уровне реквеста?
Dmitry
можно и на уровне реквеста проверить
Dmitry
по хорошему, в сервис должны прийти только валидные данные
Vitaly
ок, спасибо
Andrey
Volodymyr
Ребят, кто подскажет. Туплю.
Условно.
Есть 500 записей
Прошу по 10 с шагом тоже по 10.
->offset($offset)->limit(10) .
Когда отправляю $offset = 490 в ответ приходит пустой массив.
Если же записей 503 к примеру, то прийдет массив с 3-мя записями.
Почему так?
Evgenii
Andrey
Andrey
по мне валидации в конроллерах самый минимум должен быть
Dmitry
Dmitry
Valera
Есть модель Borrower со связью credits()
В ней :
public function getCountCreditsBefore($date){
return $this->credits()->where('issued_at', '<', $date)->count();
}
Вызов в контроллере: Credit::with('borrower')->where(...
Дальше в шаблоне надо для каждого кредита получить:
$credit->borrower->getCountCreditsBefore(...)
И на каждый конкретный кредит делается отдельный запрос в БД
Можно как-то оптимизировать запросы? EAGER LOADING почему-то тут не срабатывает
Dmitry
Dmitry
и еще совет, избегай названий методов начинающихся с get/set
Andrey
SarcasmIO
Гайз, подкиньте пожалуйта пищи для размышлений
SarcasmIO
Laravel Resource
Дампаю $this в Resource
получаю =>
"id" => 1
"place" => 1
"team" => "Manchester United"
"played" => 10
"wins" => 9
"draws" => 1
"losses" => 0
"points" => 28
"created_at" => null
"updated_at" => null
]
дампаю $this->team
получаю =>
"Manchester United"
Когда хочу вывести проперти team в toArray Resource
там пусто,
в то же время, если вернуть return parent::toArray($request);
получаю все поля
SarcasmIO
return parent::toArray($request)
SarcasmIO
return [
'place' => $this->place,
'team' => $this->team,
'team' => $this->team,
'played' => $this->played,
'wins' => $this->wins,
'draws' => $this->draws,
'losses' => $this->losses,
'points' => $this->points,
'team' => $this->when(isset($this->username), $this->username),
'first_name' => $this->when(isset($this->first_name), $this->first_name),
'last_name' => $this->when(isset($this->last_name), $this->last_name),
];
SarcasmIO
Dmitry
нука-нука, почему?
вот неплохая статеечка на тему, ну и видосы в конце. http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html
Maksim (Ellrion)
Dmitry
Andrey
ахахаха, хотите поржать с этого автора?
Он тут про DI, как антипаттерн пишет:
http://www.yegor256.com/2014/10/03/di-containers-are-evil.html
http://take.ms/8iJdG
Andrey
Такие примеры сводят мнение автора на нет.
И приписка в конце доставляет:
Impressive? This is a true object composition. I believe this is how a proper object-oriented application should be instantiated.
And DI containers? In my opinion, they just add unnecessary noise.
Andrey
Я, еще как, impressived с такого кода! Надеюсь у них есть время чтобы это дебажить.
Evgenii
Егор бугаенко особенный автор. Он пишет много интересного и разумного, но к его статьям надо очень осторожно относиться. А начинающим вообще не стоит его читать) он разумный, но хайпожор и провокатор)
Andrey
Dmitry
Evgenii
Мне нравятся его темы про управление проектами и менеджмент)
Evgenii
И процессы в разработке и качество продукта
Andrey