Laravel Чем вызван взрывной интерес к Лярве?

fixxxer

К.О.
Партнер клуба
AmdY, это проблема низкого качества бандлов, она есть, да. Фреймворк прекрасно позволяет вязать на интерфейсы.

Контракты в 5-ке как раз направлены на решение этой проблемы.
 

AmdY

Пью пиво
Команда форума
fixxxer, качество бандлов от интерфейсов особо не зависит. В ларавел они как гамбургеры из макдака, возможно не самые вкусные и полезные, но свою работу выполняют. Хуже когда как в симфони, навешивается 20 интерфейсов и абстрактных классов на бандл с корзиной, а как только твоя задача уходит в сторону от скидки-купона, всё это счастье мешает расширяться из-за непродуманности интерфейсов. Не примомню реальной проблемы когда бы пришлось страдать из-за отсутствия интерфейса, а вот с кривыми интерфейсами сталкиваться приходится постоянно.
 

fixxxer

К.О.
Партнер клуба
С кривыми интерфейсами приходится сталкиваться всегда, не важно, объявленный он или фактический =)
 

Вурдалак

Продвинутый новичок
AmdY, не очень понятно, как выделенный интерфейс может ухудшить ситуацию. Только в случае, когда есть сочетание непродуманный интерфейс + final-реализация. В остальном случае никакой разницы: хочешь наговнокодить наследованием? Что мешает?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мне кажется, речь о том, что объявление интерфейса требует реализации методов с сохранением сигнаур, а когда интерфейсов много, и методы нужны другие, получается куча ненужного кода
 

Вурдалак

Продвинутый новичок
мне кажется, речь о том, что объявление интерфейса требует реализации методов с сохранением сигнаур, а когда интерфейсов много, и методы нужны другие, получается куча ненужного кода
Как это противопоставляется отсутствию интерфейсов в принципе?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
отсутствия интерфейсов не бывает, есть разные формы их декларирования
 

Вурдалак

Продвинутый новичок
отсутствия интерфейсов не бывает, есть разные формы их декларирования
Я про выделенный интерфейс, мы про него говорим. Вам с @AmdY каким-то образом могут помешать выделенные интерфейсы:
всё это счастье мешает расширяться из-за непродуманности интерфейсов. Не примомню реальной проблемы когда бы пришлось страдать из-за отсутствия интерфейса, а вот с кривыми интерфейсами сталкиваться приходится постоянно.
Расскажите нам, я не понимаю как.
 

Вурдалак

Продвинутый новичок
мне кажется, речь о том, что объявление интерфейса требует реализации методов с сохранением сигнаур, а когда интерфейсов много, и методы нужны другие, получается куча ненужного кода
Нужны другие методы — тут в любом случае нужна своя обёртка, я уже приводил пример с PDO недавно. Нужно изменить поведение одного метода, не трогая остальную реализацию — декоратор с делегированием вызовов старой реализации.
 

Redjik

Джедай-мастер
Делаем тут Repository Pattern на Элоеквенте, идея не моя, я просто разместил обьяву(с).
Так вот... бомбануло на днях.

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

флоппик

promotor fidei
Команда форума
Партнер клуба
Это потому что... пам-парарам-пам! валидация не responsibility у ORM. И более того, в ларавеле «нет» валидации в БД, потому что там валидация всего Request. Патамушта что бы можно было завалидировать до любого доступа к БД, и завалидировать что угодно. А тебе ничего не мешает передать пустой транслятор, кстати. Тема «почиму бы не валидировать модели» подогревает ларавелесрачи еще с третьей версии.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
@WMix там проблема в том, что в ларавеле валидировать можно без view вообще, например прям в роуте, в предконтроллере, и там много мест, где перевод больше сделать типа негде.
 

Redjik

Джедай-мастер
Это потому что... пам-парарам-пам! валидация не responsibility у ORM. И более того, в ларавеле «нет» валидации в БД, потому что там валидация всего Request. Патамушта что бы можно было завалидировать до любого доступа к БД, и завалидировать что угодно. А тебе ничего не мешает передать пустой транслятор, кстати. Тема «почиму бы не валидировать модели» подогревает ларавелесрачи еще с третьей версии.
дак мне пофиг кто, что и как валидирует этой поделкой, я по факту говорю, что у этой хрени зависимость на транслятор... и передать пустой транслятор я не могу, ибо всякие max и min сам валидатор стр реплейсит... это же писец...

а где предлагаешь i18ровать? во view?
можно и во вью, пофиг =)) ну где то на уровне рендера, да


@WMix там проблема в том, что в ларавеле валидировать можно без view вообще, например прям в роуте, в предконтроллере, и там много мест, где перевод больше сделать типа негде.
что мешает после валидации в этих же местах сделать переводы?
 

WMix

герр M:)ller
Партнер клуба
мне сложно представляется как ты это видишь. там кроме "кода ошибки" еще параметры подставляются.
"abcd" слишком легий пароль, нада не меньше 6 символов

что мешает после валидации в этих же местах сделать переводы?
ну так и сделали :)
 

WMix

герр M:)ller
Партнер клуба
PHP:
class mytranslator implements TranslatorInterface{

public function trans($id, array $parameters = array(), $domain = null, $locale = null){
  return new ValidationError($id, $parameters);
}
}
ну хотя придется переписать пару методов у validate
 

WMix

герр M:)ller
Партнер клуба
да, уже согласен, да и mytranslator нарушил return type.
 
Сверху