Синглтон, антипаттерн и все-все-все

esase

Новичок
Да тебе говорят, что ты инжектишь какую-то херню, это в аргументы обычного метода тебе нужно передавать. В конструктор инжектят то, что есть на этапе конфигурации, либо через фабрику. Здесь мне трудно посоветовать что-то конкретное, потому что пример какой-то говёный: какому-то платёжному сервису нужен IRequest (щито?!), какому — какой-то говёный IModel (щито?!).

И что такое вообще «модель»? Модель чайника? Мобильника? «Модель» — это совокупность (или какой-то вполне конкретный класс — User, Book, etc.) сущностей, value object'ов и каких-то бизнес-сервисов, которые моделируют предметную область. Просто интерфейс IModel — это какое-то говно. Какие же там методы могут находится?

AmdY тоже какую-то херню несёт, в сущность User сервисы пихает, либо не умеет правильно именовать классы.
Херню пишешь ты уважаемый. Не можешь оперировать абстракциями, не пиши свою пургу не отвлекай людей. Или мне тебе какой то реальный пример из жизни вспоминать и разжевывать, что это за класс и, что он делает - какая разница?? модель ботинка или модель вурдалака. Неужели так тяжело вникнуть в суть вопроса?
А насчет использования интерфейсов в подсказках типа, думаю даже самому тупому будет ясно для, чего это делается, а не выставляется конкретная реализация некого объекта...
http://phpclub.ru/talk/members/amdy.4850/
AmdY все верно написал суть уловил, что я спрашивал, опять же вопрос к нему, вы когда-нибудь пробовали тестить такую конструкцию с внедренным контейнером?
Тяжело, невозможно, что то другое?
 

Absinthe

жожо
Варианты:
1. Передать туда SL - и пусть объект вытягивает сам, что ему нужно.
2. Сделать фабрику которая на основе Switch case смотрела что за класс требуется и инжектила туда необходимое ().
3. В фабрике юзать Di фреймворок который сам определит что нужно вашему классу и сам заинжектит туда все, что нужно.
1. Увеличивается связанность. Плохо.
2. Еще хуже.
3. Да.
 

Redjik

Джедай-мастер
ребята, кто-нибудь из вас реально инжектит модель в контроллер?
я говорю, не про поделки на досуге или десктоп приложения.
 

Redjik

Джедай-мастер
сервисы да, а модель?
ну там Book, Author.
неужто модель как сервис регаешь?

это академически правильно, но жесть же =)

ЗЫ.
Я поясню к чему клоню.
Есть хорошие практики, но переусердствовать с ООП головного мозга тоже не надо =)
 

Вурдалак

Продвинутый новичок
неужто модель как сервис регаешь?
...
это академически правильно, но жесть ж
Кто сказал, что это академически правильно? Модель ты получаешь из репозитория, mapper'а, etc. Инжектить их как сервис — это какая-то херня.
 

Absinthe

жожо
сервисы да, а модель?
ну там Book, Author.
неужто модель как сервис регаешь?
А что модели делать в контроллере при наличии уровня сервиса? :confused:
И нахрена их использовать в роле серсисов, если они сервисами не являются? Это же обычные DTO.

Мой работодатель готов идти на то, что моя производительность будет ниже с использованием всего этого. Чтобы через несколько лет проект был так же не перегружен деталями, как и сейчас.
Проект - тот самый кровавый энтерпрайз. Вне этого поля деятельности я бы так делать никогда не стал.
 

Redjik

Джедай-мастер
ваще не понял тебя =)
покажи экшен в котором создаешь книгу... псевдокодом
 

fixxxer

К.О.
Партнер клуба
переусердствовать с ООП головного мозга
ООП головного мозга - это когда используешь якобы "хорошие" практики, начитавшись книжек, но не понимая, что в каком контексте имеет смысл, а в каком являет собой полный бред. Ну вот типа как модели в контроллер инжектить.
 

Redjik

Джедай-мастер
ну дак я об этом же... хотя может за IModel скрывается что-то иное...
UPD.
А блин, там не контроллер ... но в сервисе модели тоже нечего делать
UPD...
блин туплю - лучше жевать =)
 

WMix

герр M:)ller
Партнер клуба
PHP:
public function action(){
  return(
    'books' => $this->booksService->find($this->request('query')); // сервис поставляет модель 
  );
}
 

keltanas

marty cats
Redjik, ну вот на примере доктрины, в контроллере юзается манагер моделей, который можно инжектить как сервис. А что-как с моделями, уже манагер и решает.
esase, подозреваю, что ты задал свой вопрос не в том топике. Посмотри, к примеру, это. При помощи одной лишь зависимости можешь создать неограниченные возможности для класса (хотя тоже способ спорный=) Мне не нравится магия.
 

hell0w0rd

Продвинутый новичок
Redjik, Absinthe, вы одно и то же под моделью имеете ввиду?) у доктрины модель - это инстанс репозитория, а у AR - статические методы модели.
 

AmdY

Пью пиво
Команда форума
AmdY все верно написал суть уловил, что я спрашивал, опять же вопрос к нему, вы когда-нибудь пробовали тестить такую конструкцию с внедренным контейнером?
Тяжело, невозможно, что то другое?
Получается грязноватый юнит тест, так как нужно готовить контейнер, но большой проблемы в этом нет.
PHP:
$ioc = new IoC();
$ioc['mailer'] = Mockery::mock('Foo\Mailer')->shouldReceive('send');
$userRepository = Mockery::mock('UserRepository')->shouldReceive('create');
$controller = new Acme\Controller\User($ioc, $userRepository);
$result = $controller->registration();
 

Вурдалак

Продвинутый новичок
Redjik, Absinthe, вы одно и то же под моделью имеете ввиду?) у доктрины модель - это инстанс репозитория, а у AR - статические методы модели.
Модель — это сущность из предметной области приложения, а не инстанс репозитория или набор методов.
 

hell0w0rd

Продвинутый новичок
Вурдалак, что ты имеешь ввиду под
сущность из предметной области приложения
Модель - это слой для работы с данными, их хранением и изменением. За эту задачу отвечают вышеуказанные сущности.
 
Сверху