@oop_ru

Страница 344 из 785
val
25.09.2017
05:32:46
мне кажется нужная вещь, если объект согласно реализуемого интерфейса возвращает объекты с другим определенным интерфейсом. итератор например.

Sergei
25.09.2017
05:33:01
Да, я загнул немного про "конкретные методы" - но это все еще правда про классы, которым дается доступ.

Google
val
25.09.2017
05:33:44
объекту итератору надо использовать private\protected методы доступа к элементам своего родителя, а родителю как коллекции их раскрывать необязательно

Sergei
25.09.2017
05:35:02
У меня так же возникало желание делать friend method (не класс) когда я реализовавал operator« (вывод в поток).

Anton
25.09.2017
06:56:00
Опять набрасываю: если хочется использовать friend классы значит абстракции выбраны не верно.

Хотя как по мне годная штука в определенных сутациях.

Sergei
25.09.2017
06:57:09
В целом я наверное мог бы по пальцам пересчитать случаи, когда вот прямо хотелось писать friend-код в C++.

По-моему, мой мир не стал бы существенно хуже, если бы C++ не поддерживало такой затеи, как friend-классы и методы.

Art
25.09.2017
06:58:44
Что за френд? Без усложнений и лишнего кода, тупо классы и все?

Anton
25.09.2017
06:59:11
Вот! Именно. Есть - хорошо, нету - ну и не надо.

Art https://wiki.php.net/rfc/friend-classes

Sergey
25.09.2017
07:01:12
Вот! Именно. Есть - хорошо, нету - ну и не надо.
мне больше нравится как в java реализовано - package-level приватные члены и все такое

@zloyuser ну вот в примере по ссылке - у тебя есть некий Person и какого черта он что-то должен знать о каком-то там HumanResourceReport?

Google
Sergey
25.09.2017
07:05:19
это открывает огромный простор по повышению content coupling между штуками

Art
25.09.2017
07:06:21
А паттерны используете на работе?

Sergey
25.09.2017
07:06:42
А паттерны используете на работе?
если ты разберешься откуда появились паттерны - ты ответишь на свой вопрос

Art
25.09.2017
07:07:26
У меня в js отлично заходят синглтон, декаратор, наблюдатель, посредник (прокси), модуль

Sergey
25.09.2017
07:07:43
глобальный доступ к зависимостям и все такое + тебе скорее всего "сингелтон" не нужен

и короч ты сейчас на этапе "пихать паттерны везде". Скоро пройдет

принципы не забудь выучить которые в основе этих паттернов лежат (GRASP)

Артур Евгеньевич
25.09.2017
07:08:47
Декоратор очень удобен когда нужно добавить функционал в старый класс за который тебя выебут на ревью, и ты не хочешь чтобы git blame твое имя выводил в нем)

Art
25.09.2017
07:08:59
Не, в js я прокачан хорошо по es5

Art
25.09.2017
07:09:16
Так что использую при проектировании спа

А в php есть диспетчер событий или это только из ассинхрого мира?

Sergey
25.09.2017
07:10:36
я тебе больше скажу - в php есть возможность event loop юзать

da horsie
25.09.2017
07:17:19
Art
25.09.2017
07:17:24
Ну колбеки как костыль там аыглядат чет

Anton
25.09.2017
07:17:47
@zloyuser ну вот в примере по ссылке - у тебя есть некий Person и какого черта он что-то должен знать о каком-то там HumanResourceReport?
Так я и не спорю. Я в практике не встречал когда мне прям вообще не в моготу без friend-класса обойтись.

там весь Rx есть, если очень хочется
Rx в php выглядит вяло и не нужно. Другое дело конкрунтнын либы аля amphp, ReactPHP

Sergey
25.09.2017
07:20:20
Так я и не спорю. Я в практике не встречал когда мне прям вообще не в моготу без friend-класса обойтись.
я рассматривал friend классы как "форматтеры для сущностей" но сейчас чет как-то не особо хотел бы такого.... ну мол идея была в том что "вот у меня ORM-ка сущность выплевывает и я не хочу писать геттеры тупо для формирования представления". Но сейчас как бы я думаю что для представления мне не нужна orm.

Google
Sergei
25.09.2017
07:21:44
мне кажется нужная вещь, если объект согласно реализуемого интерфейса возвращает объекты с другим определенным интерфейсом. итератор например.
хороший пример с итератором, как раз хотел написать, но если бы не было нестед классов то можно было бы использовать package level модификаторы на методы которые открывают внутренню структуру коллекции для итератора, снаружи пакета они были бы всё равно недоступны

Anton
25.09.2017
07:26:29
я рассматривал friend классы как "форматтеры для сущностей" но сейчас чет как-то не особо хотел бы такого.... ну мол идея была в том что "вот у меня ORM-ка сущность выплевывает и я не хочу писать геттеры тупо для формирования представления". Но сейчас как бы я думаю что для представления мне не нужна orm.
И опять мы возвращаемся к CQRS. Если модели построены правильно и разделены на Write и Read то все эти ухищрения начинают казаться костылем, чем по сути и являются. Нет я не спорю что могут быть хорошие, годные кейсы для friend классов, и потому я не против такой возможности в PHP, но кардинально данная возможность ничего не изменит в ООП структуре.

Anton
25.09.2017
07:28:08
Есть такие опасения, но по сравнению с Generic (еще один RFC) friend классы мелочь по опасениям.

Sergey
25.09.2017
07:28:35
и поддержку ко/контрвариантности типов

Anton
25.09.2017
07:29:10
А я хочю Generic + Method overload

Sergey
25.09.2017
07:29:28
А я хочю Generic + Method overload
почему бы просто не взять какой-нибудь kotlin (что бы не java)

Art
25.09.2017
07:29:33
глобальный доступ к зависимостям и все такое + тебе скорее всего "сингелтон" не нужен
ну у меня метод отдельный в модулях для DI в js. Через него делаю его локальным в модуле, но глобальным для всех методов модуля

Anton
25.09.2017
07:29:39
Но хотеть нам как минимум до 8 версии

@fes0r потому что я работаю с PHP. А в домашних проектах балуюсь С#.

Антон
25.09.2017
11:06:18
Друзья, а может ли мне кто нибудь объяснить для чего дружественные классы в c++? И не нарушение ли это инкапсуляции? Если нет, то почему?

Sergey
25.09.2017
11:11:04
у тебя левый класс может быть дружественным

и если передать инстанс в дружественный класс

то можно достучаться до приватных пропертей

так работает например в пхп если в статический метод User передать инстанс юзера или нестед классы в джаве

Антон
25.09.2017
11:14:20
то можно достучаться до приватных пропертей
Хм, но это разве не признак "плохой архитектуры"?

Sergey
25.09.2017
11:14:59
Хм, но это разве не признак "плохой архитектуры"?
выше был пример с принтерами различными

Google
Sergey
25.09.2017
11:16:03
и фабрики тоже отличный вариант

Anton
25.09.2017
11:17:04
так работает например в пхп если в статический метод User передать инстанс юзера или нестед классы в джаве
В PHP область видимости распространяется на класс, а не объект. Потому такие штуки и работают, и даже не со статическими методами.

К friend это отношения не имеет от слова совсем

Sergey
25.09.2017
11:18:12
так работает например в пхп если в статический метод User передать инстанс юзера или нестед классы в джаве
статика в php это просто вызов методов в контексте класса. Фрэнд классы это как объеденение контекстов.

Sergey
25.09.2017
11:18:35
я знаю что такое дружественные классы, ни в пхп, ни в джаве их нет

не надо об этом писать по 10 раз

Anton
25.09.2017
11:18:48
class User { private $name; public function equal(User $other) { return $this->name === $other->name; } }

Sergey
25.09.2017
11:18:51
это пример чтобы человек понимал примерно что это такое

Sergey
25.09.2017
11:19:01
вопрос был нарушение ли это инкапсуляции - ответ да, нарушение. Как и protected является нарушением инкапсуляции в контексте наследования

по сути фрэнд классы это циклическая зависимость, а это уже свидетельствует об ошибках в проектировании. Но не ошибаться мы не умеем а потому очень редко и как кастыль оно норм

чем фрэнд классы хуже нестед классов например - тем что с nested классами мы ограничены одним пакетом, а в случае с friend классами "дружить может кто угодно" и это открывает огромный простор для повышения связанности и нарушения всех принципов по работе с зависимостями.

так же nested классы могут быть приватными - что удобно в случае с vo например и внутренеей кухни модуля. Билдеры - оч хороший пример.

Антон
25.09.2017
11:23:22
Теперь понятно, спасибо всем:)

Sergey
25.09.2017
11:23:33
к слову билдеры в контексте php неплохой пример для фрэнд классов

Антон
25.09.2017
11:25:18
Я просто увидел вот это https://wiki.php.net/rfc/friend-classes

И у меня возникли вопросы

Sergey
25.09.2017
11:27:34
мне больше не нравится то что нужно в самом классе явно указывать зависимость на другой класс

class Fibonacci { friend FibonacciTest;

Google
Sergey
25.09.2017
11:28:13
вообще вот в твоем примере тестируемый код зависит от теста

Sergey
25.09.2017
11:28:15
даж хз, выглядит как-то не очень гибко

Sergey
25.09.2017
11:28:21
что мягко скажем намекает на то что что-то пошло не так

даж хз, выглядит как-то не очень гибко
это циклические зависимости и возможность "разбить" жирный класс на много маленьких не особо заморачиваясь)

кастылек небольшой...

лучше б нестед классы замутили. но для php вряд-ли смогут нормально сделать

Patrik
25.09.2017
16:04:17
Кто мне может сформулировать, чего нового дядя боб кроме названия придумал в своей clean architecture, относительно гексагональной архитектуры кокберна?

Sergey
25.09.2017
16:05:47
Кто мне может сформулировать, чего нового дядя боб кроме названия придумал в своей clean architecture, относительно гексагональной архитектуры кокберна?
гексагоналка менее четко регламентирует что у тебя внутри слоев. Там вся идея лишь про направление зависимостей и использование инверсии зависимостей.

clean architecture это считай надстройка, как гексагоналка надстройка над просто onion

но ИМХО меня смущают его "интеракторы"

andretshurotshka?❄️кде
25.09.2017
16:08:48
Тайпклассы норм

Patrik
25.09.2017
16:10:08
но ИМХО меня смущают его "интеракторы"
так по сути те же юз кейсы, нет?

Страница 344 из 785