@oop_ru

Страница 320 из 785
Sergey
16.08.2017
20:50:25
или "потом пригодится"? если последнее - YAGNI

как пригодится так и заведешь

Max
16.08.2017
20:50:30
а интерфейс зачем тогда? если судя по названию реализация всегда одна
Хм.. чтобы другие классы зависели от интерфейса, а не от конкретной реализации. Тогда кто-то другой сможет подменить моя стандартную реализацию на свою.

Sergey
16.08.2017
20:50:36
инструменты автоматического рефакторинга что ли не завезли

Google
Max
16.08.2017
20:50:53
Aleh
16.08.2017
20:51:14
ну, т.е. если я знаю, что буквально через две недели я уже буду пилить новую реализацию этого интерфейса, то да, я сразу создам интерфейс и первую реализацию

Sergey
16.08.2017
20:51:16
ну то есть у тебя у ЛЮБОГО объекта есть интерфейс, публичная часть, API

Aleh
16.08.2017
20:51:45
но ты в этом случае уже должен знать специфику
так да, я понимаю особенность конкретной реализации

Sergey
16.08.2017
20:52:04
Ой, мамочки
а с точки зрения клиентского кода - ему плевать интерфейс ты ему или класс подсунул.

Max
16.08.2017
20:52:18
инструменты автоматического рефакторинга что ли не завезли
Не предполагаешь, что от твоего кода может зависеть другой код? Если ты публикуешь пакет на пекеджисте, а потом вдруг начнешь такие фортеля выписывать, пользователи твоего пакета спасибо не скажут :)

Max
16.08.2017
20:53:12
Любой композер пакет

Sergey
16.08.2017
20:53:17
сек

ты торопишься

Google
Sergey
16.08.2017
20:53:58
- был класс App\Orders\Order который зависил от App\Payments\AccountGenerator класса. - спусля пол года появилась необходимость сделать несколько реализаций. Теперь старый класс называется NxtAccountGenerator а интерфейс остался тем же, в итоге зависимый код ничего и не узнал

Любой композер пакет
опять же чинится ровно таким же способом.

и опять же в этом случае намного проще в плане "наверное будут другие реализации и моя реализация дефолтная и отличается тем-то тем-то"

Saen
16.08.2017
20:55:21
о, я как раз эквайринг ща делаю

из говна и палок, но вас читать забавно)

Sergei
16.08.2017
20:55:58
так как реализовать shape.isFitInto(door) если shape и door - объекты? кто должен "раскрыть" свои параметры?
тот у кого больше информации для выполнения операции, information expert. Думаю здесь shape.ifFit() подходит

Sergey
16.08.2017
20:56:39
1. dependency injection 2. final класс

Max
16.08.2017
20:58:08
Т. е. вместо того, чтобы сразу позаботится о расширяемости своего модуля, обрубаем концы и вставляем палки в колеса? :)

Это основополагающий принцип: программировать на уровне абстракций, а не конкретных реализаций.

Aleh
16.08.2017
20:59:03
как раз наоборот, чтобы он нормально расширялся и была возможность самому потом развивать проект, очень жестко следим за публичным интерфейсом

Saen
16.08.2017
20:59:14
ХАХАХАХ!

с сферическом вакууме да, абстракции рулят

Saen
16.08.2017
20:59:49
лучший код что я видел это максимум скачала фреймворк и глянул на него и все,

Aleh
16.08.2017
20:59:56
Что в подходе с интерфейсом этому противоречит?
ничего, как и с классом без интерфейса

Saen
16.08.2017
20:59:59
в более менее рабочем проекте всегда говны тонны

мне фраза нравится: я видел два типа проекта - рабочий и с хорошим кодом

Sergey
16.08.2017
21:01:32
Это основополагающий принцип: программировать на уровне абстракций, а не конкретных реализаций.
основополагающий принцип - information hiding, но про него мало кто помнит

Google
Max
16.08.2017
21:01:33
с сферическом вакууме да, абстракции рулят
Я понимаю, что сроки и лень, но речь же об ооп, а не о том, как сделать вид, что следуешь ооп, но сделать быстро. Какими принципами поступаться в угоду скорости — это уже вам решать в конкретной ситуации.

Saen
16.08.2017
21:01:55
я думал вы тут науку на землю приземляете

Sergey
16.08.2017
21:01:59
Т. е. вместо того, чтобы сразу позаботится о расширяемости своего модуля, обрубаем концы и вставляем палки в колеса? :)
когда узнаешь как модуль будет расширяться - тогда и сделаешь возможность расширяться.

Saen
16.08.2017
21:01:59
или вы чисто науку гнете?

если науку, то окай, я не прав

Max
16.08.2017
21:02:19
основополагающий принцип - information hiding, но про него мало кто помнит
Я знаю про инкапсуляцию, а про такое не слышал

Max
16.08.2017
21:03:21
есть такая мысль - premature generalization is root of all evil
Это не обычно не про интерфейс :) про более высокие уровни.

Типа, если тебе нужен кастомер, не нужно начинать с класса HumanBeing.

Max
16.08.2017
21:04:52
вот об этом я и говорю. Икапсуляция для многих это геттеры и сеттеры
К сожалению, но не улавливаю как это связано с темой сейчас.

Sergey
16.08.2017
21:04:54
Это не обычно не про интерфейс :) про более высокие уровни.
и да и нет - если ты просто так лепишь интерфейс - это по сути оно и есть

что за желание наследовать все?

идея с абстракциями очень простая

Max
16.08.2017
21:06:01
Sergey
16.08.2017
21:06:12
ну ты ж сам про хуман бин упомянул

абстракции идут после конкретики

Google
Sergey
16.08.2017
21:06:31
то есть сначала тебе надо решить "что у тебя есть" а уже потом обобщать

а многие начинают сразу интерфейсы липить и абстракции лишние

Max
16.08.2017
21:06:42
Sergey
16.08.2017
21:06:56
вот выше и объяснил

у тебя либо сразу видно чем твоя реализация уникальна и какие еще можно родить, либо лепи файнл класс

потому что не надо разрешать его "расширять"

пока мы не поняли как его юзают

К сожалению, но не улавливаю как это связано с темой сейчас.
другое название этого принципа - open/close principle. И еще одно название - protected variations.

это я про information hiding

это имеет непосредственное отношение к абстракциям, late binding и "расширяемости"

Max
16.08.2017
21:09:12
а многие начинают сразу интерфейсы липить и абстракции лишние
Ну, вот тут не соглашусь. Если сначала решить задачу на уровне интерфейсов и взаимодействия между объектами этих типов, то будет более глубокое понимание системы. И уже потом стоит приниматься за реализацию этих типов.

Sergey
16.08.2017
21:09:16
и инкапсуляция - она просто про "есть внутри и есть снаружи"

Max
16.08.2017
21:10:05
другое название этого принципа - open/close principle. И еще одно название - protected variations.
Ой, это что-то вообще не про то, но заводится, чувствую, не стоит.

Sergey
16.08.2017
21:10:30
Ну, вот тут не соглашусь. Если сначала решить задачу на уровне интерфейсов и взаимодействия между объектами этих типов, то будет более глубокое понимание системы. И уже потом стоит приниматься за реализацию этих типов.
1. стоимость исправления ошибок возрастает на порядки если твое глубокое понимание оказалось ложным 2. это работает только для очень простых задач

Aleh
16.08.2017
21:10:49
Ну, вот тут не соглашусь. Если сначала решить задачу на уровне интерфейсов и взаимодействия между объектами этих типов, то будет более глубокое понимание системы. И уже потом стоит приниматься за реализацию этих типов.
нет проблемы вначале составить интерфейс, а потом сделать реализацию. Просто может оказаться, что пока их разделять нет никакого смысла и полчается один класс)

Sergey
16.08.2017
21:10:56
лучше быстренько "решить задачу" а потом "отрефакторить" введя интерфейсы

и под "отрефакторить" я не про когда люди месяц пилят и потом пытаются выбить неделю на рефакторинг, а 20-30 минут кодинг и 5-10 минут рефакторинга

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

Google
Saen
16.08.2017
21:15:22
у меня скорее так - кодишь неделю, потом день рефакторишь

Sergey
16.08.2017
21:15:35
попробуй)

оно так намного "чище" код выходит.

ну и еще принцип бойскаута

Saen
16.08.2017
21:16:18
у меня проблема в том что все обстракции рисуются в процессе и с самого начала знаю примерно 50% как будет выглядит, остальное рисуется на ходу

ну это особенности говна в котором я сижу)

Sergey
16.08.2017
21:16:39
"наперед" абстракции делать весьма трудозатратно

Saen
16.08.2017
21:16:55
так в том и прикол, что есть хорошо и что есть плохо ясно в конце)

20 минут это так се конец)

но можно попробовать

Sergey
16.08.2017
21:17:41
20 минут это так се конец)
ну хз... сильно зависит от того как ты дробишь задачи

Max
16.08.2017
21:17:42
Проектировать не пробовал перед кодингом?

Saen
16.08.2017
21:17:46
интересено как это выглядит

Sergey
16.08.2017
21:18:22
Необосновано.
пробовали. месяц проектирования и планирования, 3 месяца разработки, пол года все было хорошо а потом пришли изменения требований

Saen
16.08.2017
21:18:32
чтоб адекватно проектировать это все, нужно погружение в бизнеспроцессы,

Max
16.08.2017
21:18:56
И что, напроектировали такого, что не выдержало изменений?

Sergey
16.08.2017
21:19:02
чтоб адекватно проектировать это все, нужно погружение в бизнеспроцессы,
именно, нужно ооочень хорошо понимать интересы бизнеса, предметную область и на основе этого "предполагать" изменения наперед. А это как с погодой

Aleh
16.08.2017
21:19:44
ну это скорее не понимать, а быть источником этих бизнес-процессов. Тогда да, ты все знаешь наперед

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