@prophp7

Страница 1209 из 1387
Maksim
28.07.2018
18:33:25
а я вот не понял разницу между бриджем и стратегией =\
Бридж помогает впихнуть невпихуемое)

Sergey
28.07.2018
18:33:34
https://en.wikipedia.org/wiki/Coupling_(computer_programming)

Maksim
28.07.2018
18:34:00
Стратегия всё ж позволяет подумать, мб есть что-то, что невпихуемое впихнёт)

Artem
28.07.2018
18:38:09
ну да, там упоминается, что бридж для уже готового кода, а стратегия для ещё не написанного, но что-то я упускаю =\

Google
andrew
28.07.2018
18:41:59
а я вот не понял разницу между бриджем и стратегией =\
Бридж структурный шаблон, позволяет выставить структуру классов но не позволяет ее изменить в рантайме, стратегия - поведенческий, можно менять реализаторы в рантайме. Если в бридж прикрутить смену реализаторов то получится стратегия

Artem
28.07.2018
18:43:04
а ещё в русском переводе ужасные названия шаблонов в книге - до сих пор не запомнил, кто там "посредник", прокси или медиатор. Но на самом деле это всё (в смысле шаблоны) наверное не так важно. Вот наследование vs композиция - важно по-моему и вот тут непонятно, что такое семантика наследования и как её найти =\

Nurik
28.07.2018
18:43:34
Офигеть, тут дисскуссия. А начинали за то, что трейты говно.)))

andrew
28.07.2018
18:47:36
хз, почему нельзя в рантайме поменять? Что мешает?
Если сделаешь метод, то получится стратегия

Сам принцип шаблона

Мешает

Реализатор передается в абстракцию и все. Дальше его не изменить. А в стратегии можно

Так как стратегия не выстраивает стрктуру а меняет поведение

Как композитный шаблон

Artem
28.07.2018
18:49:05
Сам принцип шаблона
а зачем тогда разные имплементации? В смысле если их нельзя менять - зачем их больше одной и вообще выделять отдельно?

andrew
28.07.2018
18:49:31
а зачем тогда разные имплементации? В смысле если их нельзя менять - зачем их больше одной и вообще выделять отдельно?
Их можно 1 раз выбрать на основе конфига или условия и передать в абстракцию и все

А в стратегии реализатор можно в рантайме поменяиь

Google
Nurik
28.07.2018
18:49:51
не нужно просто воспринимать mvp как отдельный проект. MVP это лишь начальная фаза продукта. Фразы типа "забей. нахерач по быстрому на ларе потом нормально перепишем" это групость полнейшая. Вопервх потому что если это взлетит никто переписывать ничего не будет - если хайп трейн с инвестициями тронулся то тебе надо быстрее его гнать а не замедлять
@fes0r Можешь плиз дать совет, как можно грамотно это объяснить людям, которые отвергают мысль, что MVP это начальная фаза проекта, но не "прототип". Потому что я честно говоря, сильно заебался, это объяснять. Ну или наверное потому что, я этого не умею делать.

andrew
28.07.2018
18:49:51
Через сеттер например

militska
28.07.2018
18:50:26
опять же декоратор как то мутно выглядит. как будто лучше максимально избегать сего. можо притянуть за уши форматирование текста. но пока из совего опыта не могу найти раузменое применение декоратора

militska
28.07.2018
18:51:17
комбинировать типа возможыне поведения наследования, типа

типа множетсвенное наследование для тех у кого пхп

?

Bohdan
28.07.2018
18:51:53
@fes0r Можешь плиз дать совет, как можно грамотно это объяснить людям, которые отвергают мысль, что MVP это начальная фаза проекта, но не "прототип". Потому что я честно говоря, сильно заебался, это объяснять. Ну или наверное потому что, я этого не умею делать.
mvp - это не демонстрация того, как проект будет выглядеть, когда все будет классно это реализация наименьшего множества функций этого проекта, которая позволит понять ценность проекта

militska
28.07.2018
18:52:43
но как то не праивльно налсдеование тут не подохлдит

Artem
28.07.2018
18:52:59
Через сеттер например
то есть всё-таки реализации отличаются наличием возможности изменения имплементации (сеттер)? о_О

Bohdan
28.07.2018
18:53:03
прототипы - это всякие мокапы и тд

andrew
28.07.2018
18:53:25
но как то не праивльно налсдеование тут не подохлдит
Декоратор должен имплементировать интерфейс декорируемого объекта, в чем проблема?

то есть всё-таки реализации отличаются наличием возможности изменения имплементации (сеттер)? о_О
Отличаются тем что один шаблон поведенческий а другой структурный ну

Artem
28.07.2018
18:54:28
Отличаются тем что один шаблон поведенческий а другой структурный ну
наверное над этим стоит в первую очередь задуматься =\

Отличаются тем что один шаблон поведенческий а другой структурный ну
вообще что-то в этом есть, да, структура более статическая получается, а поведение более динамическое

Nurik
28.07.2018
18:58:13
mvp - это не демонстрация того, как проект будет выглядеть, когда все будет классно это реализация наименьшего множества функций этого проекта, которая позволит понять ценность проекта
Ок, но MVP можно начать делать правильно изначально. Потому что иначе, переписывание и это уже другой проект по сути. Потому что ты его переписываешь с нуля. И вот никогда не бывает такого, чтобы когда это взлетит, тебе дали время чтобы ты переписал "нормально", потому что это полная хуйня. Нужно сразу писать нормально и закладывать время на нормальный вариант архитектуры.

Google
Bohdan
28.07.2018
18:59:06
я и не говорю, что надо делать его неправильно

andrew
28.07.2018
18:59:19
вообще что-то в этом есть, да, структура более статическая получается, а поведение более динамическое
В стратегии мы меняем поведение объекта изнутри когда звхотим, а в бридже мы просто выстраиваем структуру классов на основе какого-то кондишина и дальше этим пользуемся

Bohdan
28.07.2018
18:59:33
просто его надо сделать быстро, жертвуя не качеством, а количеством

Nurik
28.07.2018
19:01:31
я и не говорю, что надо делать его неправильно
Ок. Это не особо важно. Важно то, как донести эту блядскую, но в то же время истинно правильную мысль, что: MVP это не ебанное проложение-прототип, а фундамент, на котором будет держаться весь проект. Гибкий и расширяемый Core, который местами говно, но который не на один раз.

Artem
28.07.2018
19:01:46
В стратегии мы меняем поведение объекта изнутри когда звхотим, а в бридже мы просто выстраиваем структуру классов на основе какого-то кондишина и дальше этим пользуемся
ну, "когда захотим" - это уже наверное перебор, всё-таки в рамках операции наверное не стоит менять поведение, как-то уже опасновато выглядит

andrew
28.07.2018
19:02:51
ну, "когда захотим" - это уже наверное перебор, всё-таки в рамках операции наверное не стоит менять поведение, как-то уже опасновато выглядит
Все зависит от задачи. Напрмер если в объекте есть данные и нам надо отправить их в 3 разных места, мы по очереди меняем реализаторы и вызываем send()

Все зависит от задачи. Напрмер если в объекте есть данные и нам надо отправить их в 3 разных места, мы по очереди меняем реализаторы и вызываем send()
И нам не надо создавать новые абстракции и передавать туда реализаторы с данными как в случае с бриджем

andrew
28.07.2018
19:07:19
я в том смысле, что не стоит в операцию send зашивать смену поведений
Дак и не надо. Смена поведений обычно через сеттеры делается

И сама абстракция ничего не знает про реализаторы

За исключением интерфейса

Artem
28.07.2018
19:08:06
Дак и не надо. Смена поведений обычно через сеттеры делается
спасибо, до меня даже вроде что-то дошло =)

Nurik
28.07.2018
19:11:47
ну зависит от того, почему они вбили себе в голову эту дурь и как они ее поддерживают
Ну это да, но я больше хочу понять, на что давить и при этом аргументирванно, чтобы обосновать, что нужно закладывать время на создание core системы, которая затачивается под определенные задачи бизнеса, и при этом делать не прототип системы, которую просто выкинут, а его ядро. При этом основная ошибка, что когда проект уже работает, и нужно на проде вносить изменения, то магическом образом, прототип превращается в core. Просто аргументы, типа что потом фичи будут вноситься неебически долго, не устраивает. Нужно что-то более весомое.

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

Bohdan
28.07.2018
19:31:38
ну имхо первое и главное - объем работы для написания заново он не компенсирует несколько увеличенный объем работы для написания ядра второе - качество продукта, если придется сразу продолжать третье - можно утерять что-то в процессе переписывания

просто если им этих примеров мало - тут уже не уверен, что что-либо спасет

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

Nurik
28.07.2018
19:41:09
Прежде, было все норм, но теперь руководство вбили себе в голову, что если пригласить +10 человек, то проекты магическим образом будут делаться быстрее. Мне кажется, что всё это бесполезно.

Bohdan
28.07.2018
19:41:49
ну в этой ситуации уж точно

Google
Igor A.
28.07.2018
20:39:08
Всем привет. Пытаюсь тут осознать отказ от геттеров и сеттеров. С сеттерами в голове проблем не возникло. А вот с геттерами задался вопросом. Как мне тогда из энтити полчить данные? В голову пришел какой-то такой метод: class Post { private $name; public function toView() { $view = new PostView(); $view->name = $this->name; return $view; } } class PostView { public $name; } Скажите, пожалуйста, хорошая ли это идея?

Bohdan
28.07.2018
20:42:13
скорее, наоборот - вьюшка должна завязываться на сущность

а не сущность на вьюшку

Shmaltorhbooks
28.07.2018
20:42:54
А просто прочитать значение свойства никак нельзя?)

Shmaltorhbooks
28.07.2018
20:43:34
А с сеттерами как разрулил?)

Bohdan
28.07.2018
20:43:42
class PostView { public $name; public static function create(Post $post): self {...} }

Igor A.
28.07.2018
20:43:54
А с сеттерами как разрулил?)
Сделал их семантично логичными. Типо ренейм.

Bohdan
28.07.2018
20:43:55
дальше имхо понятно

Igor A.
28.07.2018
20:44:05
class PostView { public $name; public static function create(Post $post): self {...} }
Но ведь в этой функции нет доступа к прайват полям?

Artem
28.07.2018
20:48:19
@igor_kamyshev вообще хз, на таком простом примере получается, что нет смысла вот это вот всё проделывать, т.к. никакой логики в объекте Post нет. Так-то можно наверное и не делать никакого PostView =\ (осторожно, кнопкодавы могут научить тебя плохому!)

Shmaltorhbooks
28.07.2018
20:52:16
В обязанности логики сущности должно входить приведение самой сущности к вьюхе?

Artem
28.07.2018
20:54:24
Ну ты представь, что там есть куча логики.
ну я бы так нопесал наверное: class PostView { private $post; public function __construct(Post $post) { $this->post = $post; } public function toView() {//...} }

Igor A.
28.07.2018
20:54:33
В обязанности логики сущности должно входить приведение самой сущности к вьюхе?
Вот и меня это смущает немного. Но не могу найти другого решения.

Dmitry
28.07.2018
20:57:52
кто пробовал держать задачи кролика по несколько часов? Держать - в смысле не давать ask

Google
Artem
28.07.2018
20:57:54
Ну а как доступиться до полей то? Они прайват должны быть.
в случае если в Post добуя логики - у тебя нет там геттеров, у тебя есть методы в которых шото происходит. Но в реальности наверное геттеры какие-то всё равно будут

Artem
28.07.2018
21:01:00
Но не хочется же. @fes0r вон все время рассказывает, что нужно иначе строить сущности.
ну типа это же не значит, что никогда нельзя использовать геттеры. Ну во всяком случае я это так понимаю =\ Как я уже говорил - кнопкодавы могут вводить тебя в заблуждение =)

Igor A.
28.07.2018
21:02:04
ну типа это же не значит, что никогда нельзя использовать геттеры. Ну во всяком случае я это так понимаю =\ Как я уже говорил - кнопкодавы могут вводить тебя в заблуждение =)
Я понимаю. Но я и сам чувствую опасность геттеров. Они доступ до внутреннего состояниях сущности. А я не хочу такой доступ. Я хочу только ДТО какое-нибудь с частью данных.

Dmitry
28.07.2018
21:05:25
опять же декоратор как то мутно выглядит. как будто лучше максимально избегать сего. можо притянуть за уши форматирование текста. но пока из совего опыта не могу найти раузменое применение декоратора
Реальный пример - какая-то ентити с набором данных, которую нужно закэшить. Можно решить путем создания декоратора-кэшера. Который поверх результата от деятельности декорируемой сущности будет сохранять в кэш результат или выбирать из кэша.

Artem
28.07.2018
21:32:04
Тут основной вопрос в том есть у тебя выбор (не юзать сущности для ui) или нет
это типа если вариант с CQRS, то можно обойтись и без геттеров?

Sergey
28.07.2018
21:32:45
Ох, минут через 15 доберусь до ноута оформлю мысль

Igor A.
28.07.2018
21:39:13
Тут основной вопрос в том есть у тебя выбор (не юзать сущности для ui) или нет
Я хочу на основе сущностей ответ для API формировать. В таком случае, в правильном направлении думаю?

Alexander
28.07.2018
21:40:32
Но зачем?..
1) проблема доступа к private-полям будет решена 2) вынесешь логику создания DTO в отдельный класс, где ей и место

Igor A.
28.07.2018
21:41:04
Alexander
28.07.2018
21:41:42
вообще хаки через рефлексию это грязно, как по мне, но всегда есть нюансы

например, на хаках с рефлексией DI-контейнеры построены и им живется неплохо

Artem
28.07.2018
21:42:16
1) проблема доступа к private-полям будет решена 2) вынесешь логику создания DTO в отдельный класс, где ей и место
если у него там логика и ему надо отобразить результаты работы логики - это не сработает. Получишь доступ к внутренним данным, а нужны результаты =\

Alexander
28.07.2018
21:42:41
ну гидраторы/экстракторы тоже иногда даже используются

https://github.com/Ocramius/GeneratedHydrator например такой

не скажу, что это right way, но имеет право на существование

Страница 1209 из 1387