
Anton
03.10.2017
15:19:41
EntityManagerInterface... давно это для меня было :)

Aleh
03.10.2017
15:19:44
Наоборот хорошо Оо

Sergey
03.10.2017
15:19:45

Adel
03.10.2017
15:19:55
Почему это?
потмоу что не надо наследоваться. надо композировать :)

Google

Sergey
03.10.2017
15:19:57
и что под "да конечно" подразумевается

Adel
03.10.2017
15:20:17
ну да :)

Aleh
03.10.2017
15:20:18

Anton
03.10.2017
15:20:29

Sergey
03.10.2017
15:20:47
проблема с extends как раз таки в смешивании понятия Наследования реализаций и типов
в контексте interface extends interface в наследовании ничего плохого нет

Aleh
03.10.2017
15:21:20
Интерфейсы без всякой ерунды типа дефолтных реализаций не смешивают

Sergey
03.10.2017
15:21:39

Anton
03.10.2017
15:21:44

Aleh
03.10.2017
15:22:17

Sergey
03.10.2017
15:22:40

Adel
03.10.2017
15:27:26
если реализация неотделима от этой абстракции, то я не понимаю смысла. Те же 8 из 9 методов LoggerInterface - должны быть default методами.

Google

Aleh
03.10.2017
15:28:04

Adel
03.10.2017
15:28:44
что именно?

Aleh
03.10.2017
15:29:41
что абстракция связана с этой реализацией?

Adel
03.10.2017
15:30:25
у LoggerInterface был бы один метод log(). А остальные 8 - просто методы-хелперы.

Sergey
03.10.2017
16:33:20

Adel
03.10.2017
16:33:35
сейчас загуглю :)
ага. ну так я и говорю. в абстрактном классе можно было бы сделать protected abstract function log(...) и публичные методы error() info() etc.

Sergey
03.10.2017
16:35:37
моя мысль простая - не нужно было туда пихать эти методы-хелперы

Adel
03.10.2017
16:35:51
так пихай их в мтеоде лог?

Sergey
03.10.2017
16:35:52
они вообще не нужны
предлагаешь мне наследоваться?
а я не хочу наследоваться

Adel
03.10.2017
16:36:17
реализовать :)

Sergey
03.10.2017
16:36:19
мне от логгера нужен только метод log

Adel
03.10.2017
16:36:23
ты же хочешь свой логгер :)

Sergey
03.10.2017
16:36:23
и больше никаких методов не надо

Adel
03.10.2017
16:36:25
фактически

Sergey
03.10.2017
16:36:34

Google

Aleh
03.10.2017
16:36:47

Sergey
03.10.2017
16:36:57
короч psr это хорошо но веьсма спорные штуки

Aleh
03.10.2017
16:37:37
мне как пользователю очень ок вместо log(‘error’, $msg) писать error($msg)

Sergey
03.10.2017
16:38:04
это и связанность уменьшает, так то да... но блин

Aleh
03.10.2017
16:38:11

Sergey
03.10.2017
16:38:13
короч абстрактные классы это плохо

Aleh
03.10.2017
16:38:55
да блин, логгер как логгер)

Sergey
03.10.2017
16:39:15
что до хэлперов и абстрактного класса - лучше трейт уже
как раз самое оно - тупой бойлерплейт

Adel
03.10.2017
16:39:56
трейты по мне - хуже абстрактных классов :)
они противоестественные

andretshurotshka?❄️кде
03.10.2017
16:40:15
тайпклассы

Aleh
03.10.2017
16:40:20

andretshurotshka?❄️кде
03.10.2017
16:40:32

Aleh
03.10.2017
16:40:38

andretshurotshka?❄️кде
03.10.2017
16:40:52
Я всегда думал что трейты это только тайпклассы

Aleh
03.10.2017
16:41:04

Google

Sergey
03.10.2017
16:41:08
трейты по мне - хуже абстрактных классов :)
это копипаста. Всего-то. Вот ты жалуешься на копипасту, тупую копипасту, без какой-либо логики. Готов даже в дефолтные методы или в абстрактный класс это запихнуть потому что 99% что будет одинаковым у всех реализаций. Даже более того - это даже юнит тестами покрывать не особо хочется.
вот для таких вещей трейты неплохо так
предоставляет дефолтную реализацию для потребителей (тех кто имплементит) твоего красивого интерфейса на 9 методов

Adel
03.10.2017
16:42:38
да ну :)
костыль

Sergey
03.10.2017
16:43:03
protected тоже кастыль, и дефолтные методы интерфейсов
но зато как прижились

Sergey
03.10.2017
16:44:07

Sergey
03.10.2017
16:44:44

andretshurotshka?❄️кде
03.10.2017
16:45:11
в тайпклассах есть DefaultSignatures это тоже самое?

Aleh
03.10.2017
16:48:17
похоже, да

Pavel
03.10.2017
19:16:51
Глупый вопрос: почему так все ломают копья насчет определения ООП, если в вики есть четкое определение -
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods.
https://en.wikipedia.org/wiki/Object-oriented_programming
Или оно слишком расплывчатое?

Aleh
03.10.2017
19:17:25
Дело в том, что ооп основано на концепции сообщений:)

Pavel
03.10.2017
19:19:27
А какие проблемы из этого вытекают?

Aleh
03.10.2017
19:20:51
Важно взаимодействие между объектами, а не сами объекты


Sergei
03.10.2017
19:33:26
Глупый вопрос: почему так все ломают копья насчет определения ООП, если в вики есть четкое определение -
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods.
https://en.wikipedia.org/wiki/Object-oriented_programming
Или оно слишком расплывчатое?
Люди вроде бы читают это определение и другие что "ооп создан для моделирования реальных процесов, переноса обьектов предметной области в код как бы напрямую что намного увеличивает семантику кода" но, потом человек смотрит в реальный код, библиотеки, разные примеры а там: гетеры, сетеры, утил классы, названия обьектов вообще хз какие... и тут начинает действовать синдром утёнка, т.к. других примеров нет и человек думает что вот ЭТО то и есть ООП, нормальный код. Определения из вики и других умных книг благополучно забываются.


Pavel
03.10.2017
19:35:34
ну как всегда, проблема в людях). А с функциональщиной, наверное, поэтому и нет проблем, ибо не мейнстрим.

Sasha
03.10.2017
19:50:22
Всем привет

Sergey
04.10.2017
08:42:05
тут у кого-то пригорает от -er суффиксов в именовании классов?
Writer, Loader, Encoder, Serializer и тд?

Google

Tex
04.10.2017
08:42:43
А должно?

Sergey
04.10.2017
08:43:09

Sergey
04.10.2017
08:44:29
это все существительные созданные из глаголов - to write, to load, to encode и тд

Sergey
04.10.2017
08:44:36
+ не забываем про "функциональное ядро и императивную оболочку"

Aleh
04.10.2017
08:44:37
не быстро
не просто
не понятно
—- три кита функционального программирования
А больше проблем нет

Sergey
04.10.2017
08:45:19
DNS::Resolve, File::load, Password::verify

Tex
04.10.2017
08:45:51

Sergey
04.10.2017
08:46:09

Aleh
04.10.2017
08:46:59
У меня немного пригорает от интерфейсов типа
Loader::load, Resolver::resolve и т.д.
В таких случаях вероятно потеряна концепция какая-то

Sergey
04.10.2017
08:47:34
у меня ассоциации с подобного вида сторями которые порой выдают бизнес аналитики

Aleh
04.10.2017
08:48:16
Ну да)

val
04.10.2017
08:50:57
подскажите, как считаете нужно поступить с отглагольными существительными в подобном кейсе для неких "решателей" уравнений например:
interface Solver{
Solve();
int GetProgress();
void Cancel();
}
class BruteforceSolver implements Solver
class GradientDescentSolver implements Solver

Sergey
04.10.2017
08:52:46

val
04.10.2017
08:53:39
допустим функция нескольких переменных

Sergey
04.10.2017
08:54:13
ну то есть почему бы не сделать Gradient у которого есть метод descent

val
04.10.2017
08:54:13
то есть функция одна, но стратегии поиска корней разные