
Sergey
24.04.2018
15:28:56
нафига там геттеры...
почему это базовый класс

Гена
24.04.2018
15:29:25

Google

Sergey
24.04.2018
15:29:31

Ilya
24.04.2018
17:53:18
Есть у меня кучка моделей, которая обладает ценами. Цену надо как то модно выводить. Может копейки обрезать, может разделители тысячам вывести. У моделек может быть несколько цен - с налогом, старая цена, акционная цена, актуальная и тд. Значится делаю для этих моделей представления для юи с всякими вспомогательными методами в которых я еще и инициализирую представления для цен по надобности
Явно я велосепидирую и чего-то не знаю, может как-то лучше можно реализовать? И как с этим правильно работать. В контроллере достаю модельки, пихаю их в типа фабрику где мне представления нагенерируются и отдаю во вью?
MVVM гуглится, это же не то?


Denis
24.04.2018
18:07:20
ни как, от слова совсем, это тоже самое что и трейт, с точки зрения абстракции и тп он не несет никакого смысла так как инстанс не может быть создан
Свои пять копеек суну: уже не раз слышал заявления, что мол реализации в абстрактном классе это моветон. Почему? Предположим есть некий апи. За каждую энтити с которой апи умеет работать, отвечает свой класс. Но у каждого такого класса должен быть набор "инфраструктурных" методов, часть из которых будут просто общими (реализация в абстрактном классе), а часть отличаются реализацией, но совпадают по сигнатуре (можно интерфейсом, можно абстрактным методом в родителе).
Я эту схему у себя делаю через абстрактный класс. Удобно, расширяемо, нет дублирования. Чтяднт?

Max
24.04.2018
18:36:50

f4rt~
24.04.2018
18:39:08
https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php
для примера, базовый класс Eloquent от которого наследуются все модели :)
чисто на затравку

Maksim
24.04.2018
18:39:31

Denis
24.04.2018
18:40:36

Max
24.04.2018
18:41:51

Maksim
24.04.2018
18:42:57
так и что ты в гисте увидеть хочешь?)
как тестировать абстрактные классы?)

Google

Max
24.04.2018
18:43:10
Ну пример кода, где там абстрактный класс

Maksim
24.04.2018
18:43:50
ну, предположим тебе скинули пример абстрактного класса. Дальше что?
и всё ещё не понятен наброс за тесты)

Denis
24.04.2018
18:52:15
Там есть хоть один абстрактный метод?
Гиста нету, рабочий проект. Абстрактные методы есть, но их действительно не много. В основном в родителе реализация флоу, а в наследника реализация деталей каждого этапа этого флоу. Абстрактные точно методы под каждый http метод (для реста) и ещё парочка, сейчас уже не помню, надо с компа смотреть

Maksim
24.04.2018
18:52:56
ну так-то их и не должно быть много)

Max
24.04.2018
18:54:13
Чисто предложение


Denis
24.04.2018
18:54:42
Я про то не лучше ли там сделать через агрегацию
Там логика примерно следующая :
в абстрактном классе есть метод handle(Request $r)
Он берет реквест, вариант из него http-метод, тип и id запрошенной энтити.
Получает инстанс энтити (реализованным в наследнике абстрактным классом) и дёргает соответствующий http-методу метод класса наследника (crud методы тоже абстрактно заданы)
Полученный ответ валидирует своим прайватом на соответствие требуемой структуре и отдаёт обратно контролеру.
Если в родителе есть набор методов вида makeSuccessResponse($data), makeNotFoundResponse($message) и прочие утилитки.
На выходе я могу отдавать задачу джуну, который пишет в наследнике получение энтити и гидрацию её в массив, да раскладывает это по поддерживаемых crud'ам. И у него минимум пространства для ошибки.
Profit же
handle() ещё и финальный для надёжности


code4aman
24.04.2018
19:24:25

Maksim
24.04.2018
19:25:46

Дмитрий
24.04.2018
19:27:03
Мимо проходил

code4aman
24.04.2018
19:29:31

Maksim
24.04.2018
19:30:22
но перечитать полезно)

Mykola
24.04.2018
19:34:22
инициализация объекта?
к конструктору куча вопросов:
- метод ли это? (а должен ли?)
- что делать с наследованием, полиморфизмом и другими LSP в отношении конструктора
- если конструктор - это что-то из разряда жизненного цыкла обьекта, то что с этим делать?
- как сделать без конструтора?
я пока склоняюсь к мысли, что конструктор - вообще вредная конструкция, которая всё портит

Maksim
24.04.2018
19:37:45
я бы не был столь категоричен) просто не стоит искать проблем на ровном месте)

Google

Дмитрий
24.04.2018
19:37:52
Программа — это вредная конструкция которая лежит между задачей юзера и его реализацией
ИЧСХ, всё портит

Maksim
24.04.2018
19:38:10
так-то жить тоже вредно) от этого болеют и умирают)

Mykola
24.04.2018
19:38:29
давайте про науку, а не про бла-бла, ок?

andretshurotshka?❄️кде
24.04.2018
19:38:40
Опять конструкторы

Mykola
24.04.2018
19:38:46
я тоже люблю выпить пива, и поговорить о том, что лучше пить пиво, чем его не пить

Maksim
24.04.2018
19:38:53
ну твоя наука от бла-бла не сильно отличается)

andretshurotshka?❄️кде
24.04.2018
19:38:53

Mykola
24.04.2018
19:39:06
при чем тут фп?

andretshurotshka?❄️кде
24.04.2018
19:39:14
Наука типо
А при чем ооп

Дмитрий
24.04.2018
19:39:29

Mykola
24.04.2018
19:40:07

code4aman
24.04.2018
19:40:10

andretshurotshka?❄️кде
24.04.2018
19:40:19
да просто я удивился, что последний раз писали про конструкторы когда я заходил

Maksim
24.04.2018
19:40:21

andretshurotshka?❄️кде
24.04.2018
19:40:29
и щас опять

Maksim
24.04.2018
19:40:37
ты решиил ЧСВ потешить, или где?)

Mykola
24.04.2018
19:40:42
ну недорешали же
всем бы лишь языком почесать

Google

Mykola
24.04.2018
19:41:06
а не конструктив предлагать

andretshurotshka?❄️кде
24.04.2018
19:41:37
че ты хотел в чате

Mykola
24.04.2018
19:41:52
:(
думаешь нет никаких шансов?

code4aman
24.04.2018
19:42:42

Maksim
24.04.2018
19:43:32
эти мамкины любители конструктива...

Mykola
24.04.2018
19:43:33

Дмитрий
24.04.2018
19:43:40
Мне интереснее что он может предложить в замен

Mykola
24.04.2018
19:43:52
дык, почему я
уже все придумано до нас

Дмитрий
24.04.2018
19:43:59
Хейтить легко и приятно, улучшать и развивать не оч

code4aman
24.04.2018
19:45:25
ну это же неправда
ну может можно через какую-то магию провернуть то, для чего есть инструменты из коробки

Mykola
24.04.2018
19:46:15
дык, зачем вы сюда все зашли, если вас устраивает сайты на вордпресе делать и не париться?
есть специальные чаты по вордпресу

Maksim
24.04.2018
19:46:31
херасе конструктив) зашкаливает просто

Mykola
24.04.2018
19:46:37
мы тут бывает обсуждаем базовые концепции ооп и зачем они нужны
вот кто обьяснит почему нужен конструктор?

Дмитрий
24.04.2018
19:47:00

code4aman
24.04.2018
19:47:01
так-то math.sqrt тоже не чистая функция по своей природе, но это не мешает никому на более высоком уровне абстракции

Дмитрий
24.04.2018
19:47:11
Ну да, плохо, дальшейшие шаги то какие?)

Google

code4aman
24.04.2018
19:47:16

Mykola
24.04.2018
19:47:35

code4aman
24.04.2018
19:47:41
засеть его

Maksim
24.04.2018
19:47:45
считай его стартовым набором фикстур, если угодно.
а вот в чём твоя проблема - кроме ахуенно раздутого чсв - большой вопрос)

andretshurotshka?❄️кде
24.04.2018
19:47:53

Mykola
24.04.2018
19:48:13

code4aman
24.04.2018
19:48:37
нет, ридонли же

Mykola
24.04.2018
19:48:50
ну сделай сеттер, почему конструктор?

code4aman
24.04.2018
19:49:09
чтоб не менялось по жизни объекта

Дмитрий
24.04.2018
19:49:34
> ну сделай сеттер
Приехали

Mykola
24.04.2018
19:49:38
а явно вызвать конструктор мне кто помешает?

Дмитрий
24.04.2018
19:49:59
Как и стрелять в ногу в упор, никто

Mykola
24.04.2018
19:50:22
точно так же я могу не вызывать сеттер попозже

code4aman
24.04.2018
19:50:24

Mykola
24.04.2018
19:50:33
или зафризить обьект, как в зенде первом
так где в сеттере нарушение lsp? там все четко
а вот в конструкторе - сплошь и рядом
сигнатура конструктора ребенка часто тупо отличается от сигнатуры родителя

Дмитрий
24.04.2018
19:51:29