Size: a a a

2020 June 04

F

FOX in PHP
запретить extends для классов хуками: нет наследования - final ненужон :)
источник

MM

Maksim Masiukevich in PHP
наследование имеет место быть. Другой вопрос, что его тоже нужно уметь готовить
источник

M

Maestro in PHP
есть какие то статьи или блог на эту тему чтобы копнуть глубже и разобраться когда  ж все таки надо в наследование а когда в композиции?
источник

MM

Maksim Masiukevich in PHP
важно понимать, какие минусы и опасности накладывает наследование и на какие компромисы можно пойти. Просто кричать "запретить наследование" - это для дебилов)
источник

M

Maestro in PHP
ибо все что находил то пишут вам в 99% надо композиция, еп а в каком же случае надо наследование)
источник

F

FOX in PHP
насчёт тестирования: обмазывать всё final, вне всякого сомнения, очень здорово, но потом начинается геморрой "бляха, нужен интерфейс, ибо иначе не протестить", хотя суть класса такова, что его ни расширять, ни наследовать с точки зрения домена нет никакого практического смысла. Но и без интерфейса никак. Развивая тему, запилили интерфейс - теперь надо для тестов писать, как в примере выше, "тестовый транспорт", что опять влечёт накладные расходы.

Видел проекты, где упарывались по final, и где жили без него, в итоге, на качество архитектурных решений наличие или отсутствие final не влияло (по крайней мере, в этих случаях), а вот на оверхед с тестами - очень даже
источник

MM

Maksim Masiukevich in PHP
FOX
насчёт тестирования: обмазывать всё final, вне всякого сомнения, очень здорово, но потом начинается геморрой "бляха, нужен интерфейс, ибо иначе не протестить", хотя суть класса такова, что его ни расширять, ни наследовать с точки зрения домена нет никакого практического смысла. Но и без интерфейса никак. Развивая тему, запилили интерфейс - теперь надо для тестов писать, как в примере выше, "тестовый транспорт", что опять влечёт накладные расходы.

Видел проекты, где упарывались по final, и где жили без него, в итоге, на качество архитектурных решений наличие или отсутствие final не влияло (по крайней мере, в этих случаях), а вот на оверхед с тестами - очень даже
у меня вон в паблике 20 реп с тестами. Пойди найди мне хоть 1 место, где есть "проблемы с тестированием"
источник

F

FOX in PHP
хороший компромисс - помечать потенциальные final-классы аннотацией @internal или вроде того. Да, рантайму пофиг, но зато девелоперу явно видно, что не стоит это трогать
источник

MM

Maksim Masiukevich in PHP
интернал аннотация не для того придумана
источник

F

FOX in PHP
Maksim Masiukevich
у меня вон в паблике 20 реп с тестами. Пойди найди мне хоть 1 место, где есть "проблемы с тестированием"
Я не о проблемах писал, а об оверхеде. Видимо, количество последнего зависит ещё и от размера кодовой базы.
источник

MM

Maksim Masiukevich in PHP
FOX
Я не о проблемах писал, а об оверхеде. Видимо, количество последнего зависит ещё и от размера кодовой базы.
можешь оверхед поискать, я не против
источник

F

FOX in PHP
я не хочу
источник

MM

Maksim Masiukevich in PHP
ты просто явно не то стараешься тестировать
источник

MM

Maksim Masiukevich in PHP
нет никакого практического смысла "тестировать сущности", или какие-то структуры
источник

F

FOX in PHP
то я тестирую, то. Всё как отцы завещали. Но, во-первых, иногда ключевые вещи - приватные, и тестить их надо, а не только публичный интерфейс. Во-вторых, бывают требования к покрытию: скажем, не менее 98% кодовой базы, и там хоть усрись - есть кастомер, есть договор, вперёд )
источник

F

FOX in PHP
хотя последнее, вне всякого сомнения, скорее частная ситуация, а не объективная необходимость
источник

BT

Bohdan Turchyk in PHP
FOX
то я тестирую, то. Всё как отцы завещали. Но, во-первых, иногда ключевые вещи - приватные, и тестить их надо, а не только публичный интерфейс. Во-вторых, бывают требования к покрытию: скажем, не менее 98% кодовой базы, и там хоть усрись - есть кастомер, есть договор, вперёд )
ну ссзб, раз подписали такие требования)
источник

DE

Dmitry Eliseev in PHP
Maksim Masiukevich
пример если у тебя есть http клиент с final и ты хочешь протестировать какой-то ответ от внешнего сервиса, то внутри клиента ты можешь сделать зависимость от  интерфейса транспорта. И реализовать транспорт для тестов. Изи
Главное - поменьше слушать любителей продать говнокурсы и побольше думать самому) через шишки рано или поздно придёт понимание
И потом прилетит письмо счастья вроде "Какого лешего здесь простыня new Client($transportMock, $xxxStub, $etc...) вместо одного createMock(Client)? Какой final-маньяк такое осилил?"
источник

MM

Maksim Masiukevich in PHP
лучше не пиши мне ничего
источник

BT

Bohdan Turchyk in PHP
требование по coverage - зло
источник