Final Or Not Final? That Is The Questuion.

Adelf

Administrator
Команда форума
Вообще мне нравится эта концепция "abstract or final". Хотел тут контраргумент написать(где final сильно бы мешал)... но в очередной раз понял, что это лишь неправильный дизайн(хотя и удобно очень). Хороший кстати критерий качества кода проекта - сделайте все неабстрактное финальным и если все работает(хотя бы скомпилилось для компилируемых) - все не так уж и плохо.
 

whirlwind

TDD infected, paranoid
Унылого? Пфффф. Чувак, покажи свой код и поговорим.

Геттеры потому что там EditableTerminal extends Terminal - сервисный уровнень доступа, который вы видите. Собственно подсистема нужна для установки блокировки на подсистему при апдейте что бы не лочить весь терминал ибо работа мультипоточная. Для потребителей фабрика выдает immutable Terminal, а для поставщиков EditableTerminal, что бы обеспечить возможность доступа к функциям модификации объектов модели. И потом, геттеры нужны что бы протестить работу фабрики. Знаете как сделать это лучше? Я категорически настаиваю что бы вы поделились этой информацией, потому что тестирование фабрик это один из тех вопросов, который давно интересует меня. К тому же там нет override. Это как бы намекает, что эти геттеры не являются частью публичного интерфейса. Я могу продолжить развивать мысль, что любые методы которые не override имеют право на существование ибо потребитель о них не знает, но чувствую что данный топик меня несколько утомил. Я не жадный на информацию. Просто хочется узнать чего полезного в обмен. А не просто получить кучу какашек.
 
Последнее редактирование:

Redjik

Джедай-мастер
по поводу пэттернов кстати, легкий офтопик, наброшу на вентилятор
 

Redjik

Джедай-мастер
Вообще мне нравится эта концепция "abstract or final". Хотел тут контраргумент написать(где final сильно бы мешал)... но в очередной раз понял, что это лишь неправильный дизайн(хотя и удобно очень). Хороший кстати критерий качества кода проекта - сделайте все неабстрактное финальным и если все работает(хотя бы скомпилилось для компилируемых) - все не так уж и плохо.
и Барбара Лисков будет довольна тоже, кстати ;)
 

Вурдалак

Продвинутый новичок
Кстати, в Behat 3 все реализации final:
https://github.com/Behat/Behat/blob/master/src/Behat/Behat/Context/Reader/AnnotatedContextReader.php
https://github.com/Behat/Behat/blob/master/src/Behat/Behat/Context/Reader/ContextReaderCachedPerContext.php
https://github.com/Behat/Behat/blob/master/src/Behat/Behat/Context/Reader/TranslatableContextReader.php
Сам автор описывает это так:
I made most classes final. The reasoning is very simple - I want to provide very powerful ecosystem for extensions to flourish. But for that - I need to control every single extension point or we all will end with system that nobody can modify now without introducing BC.
 
Последнее редактирование:

Adelf

Administrator
Команда форума
Барбара вообще на седьмом небе от счастья :)
И даже шаблон декоратор в правильном своем исполнении не противоречит этой концепции. Я проглядел свой код в паре проектов и не нашел ни одного случая где было бы необходимо наследовать неабстрактный класс. Я целиком за "Abstract or final". Даже загорелся на девконфе об этом доклад увидеть. Вурдалак - мож это? welcome в качестве докладчика? Я бы сам рассказал, но наверняка получится криво да и новый сайт конфы еще ковырять да ковырять.
 
Сверху