Antonio
говорю же, при подключении сервиса все работает нормально, где нужно не только получать эту модель, но и осуществлять некоторые смежные действия, я подключаю весь сервис.
Antonio
но чаще всего мне надо работать с объектом. И получается, что я сначала получаю переменную $rateService. Затем в другую переменную получаю $currentRate = $rateService->getRate(); и потом уже работаю с $currentRate. Почему бы не инжектить ее сразу, если есть такая возможность? Или я что-то неправильно понял?
Antonio
$rateService->getRate(); - возвращает нужные данные. В контроллере нет дополнительной логики.
Dmitry
Dmitry
поэтому цепочка в контроллере должна быть проста, пришли данные из реквеста, я их кинул в сервис он мне дал данные готовые, я их в вьюху передал. Все на этом его обязанности закончились
Antonio
хорошо. Пришли данные из реквеста, если чего-то не хватает, то эти данные генерятся вот этим сервисом, а дальше передаются в сервис, который вернет мне данные для отображения.
Antonio
но предположим я понял твою идею, что в контроллере должен дергаться только один сервис, который в свою очередь дернет все остальное
Dmitry
Dmitry
это его дело, он должен думать
Эмин
в контроллере из одной точке вы должны передавать данные во вью, должен быть один сервис который посмотрит - данные есть - используем, если их нет - передать кому то - получить ответ - используем
Antonio
но это не отменяет того факта, что в остальных сервисах (а их скорее всего будет несколько) мне всеравно надо будет подключать сервис RateService в переменную $rateService и только потом получать данные. Почему не дергать эти данные сразу?
Эмин
из других контроллеров вы так возмете данные из реквеста и передадите умному сервису, который знает как и что инициализировать
Dmitry
Antonio
VO?
Dmitry
Эмин
врядли, скорее он запутался в логике своей
Anonymous
Antonio
ValueObject
ну вот метод getRate возвращает мне именно VO (если я правильно понял этот паттерн), некую модель, у которой нет никаких дополнительных методов кроме пары связей.
Эмин
да и связей там не должно быть
Эмин
просто объект с данными
Antonio
значит это не VO, если к нему настолько строгие требования
Эмин
вам надо подумать не о том где и как вызвать метод getRate, а скорее что и как должно происходить до вызова getRate
Эмин
вот думаю в месте ДО вызова у вас и есть проблемы
Dmitry
Antonio
ээээ, этот метод вызывается сразу после проверки аутентификации. Поскольку даже на проверку авторизации уже влияют эти данные
Antonio
Эмин
Dmitry
Dmitry
Эмин
ну ничего плохого нету в сервисе, который будет знать как достать объект
Эмин
может фабрику в конце концов
Эмин
а еще лучше если у вас прям всегда эти данные нужны, повесьте мидлварю
Эмин
на ее уровне проверяйте есть ли нужные данные в запросе, и тогда инициализируйте то что вы хотите
Эмин
далее уже когда до контроллера дойдете, у вас все будет готово
Эмин
да не надо вам биндить
Antonio
Эмин
делайте в сервисе, ленивой инициализации
Эмин
геттер который посмотрит - уже есть объект и вернет его, если нет то знает как и откуда достать
Antonio
Эмин
да и бинд экземпляра объекта в контейнер... хз удачный ли это вариант
Эмин
лара поддерживает фабрику для синглтона?
Эмин
я вот не в курсе, но тут прям ему фабрику надо)
Эмин
при чем с ленивой инициализацией
Dmitry
ну да, похоже на фабрику
Эмин
да если один и тот же объект у него везде дергается, почему бы его после фабрики не положить в синглтон
Эмин
и уже не проходить процесс инициализации больше
Эмин
ну тут смотря что ему нужно
Antonio
ок. С этим я все понял. Другой вопрос
Andriy
Здраствуйте ребята, допустим у меня есть какой-то текст на странице, который я могу сохранять в БД. Но я хочу сделать его локализованным, чтобы можно было его сохранять для разных языков. Есть какие-то предложения?
Эмин
тут миллион предложений
Эмин
контент или статика в верстке?
Andriy
статика
Dmitry
Эмин
ну в верстке вы можете непосредственно транслитератор дергать
Antonio
Если у меня сейчас есть модель ClientLocal которая хранится в локальной базе, потом есть желание подключить вместо этой таблицы другую базу с моделью ClientBPM. Я хочу везде использовать просто CLient и соответственно биндить нужную реализацию. Тут я прав надеюсь? =)
Так вот вопрос, надо ли создавать абстрактный класс Client или нет?
Эмин
а в базе использовать например какие то placeholder'ы
Эмин
зависит от реализации, либо интерфейс либо абстракт точно нужно
Antonio
ну тоесть пустой файлик точно нужно создавать?
Эмин
пустой файлик точно создавать не надо
Эмин
что вы имеете ввиду под пустым файликом?
Dmitry
Andriy
Эмин
идите от интерфейса
Эмин
пишите сначало интерфейс, потом две его реализации
Dmitry
Dmitry
ну или просто пустой интерфейс
Dmitry
и ты будешь знать, что любой класс который реализует этот интерфейс можно использовать как ClientXXX
Antonio
ну а нафиг тебе тогда 2 одинаковых класса?
потому что одна модель как и вся база на MySQL. а затем будет заменено другой моделью, которая будет дрегаться с MSSQL. У них будут пересекаться некоторые свойства
Antonio
скажем так, мне надо знать, что у всех этих моделей есть поле [uid, name ...]. Как это можно прописать в интерфейсе?
Antonio
или тут тоже не нужен биндинг, а потом просто заменить один класс на другой?