Расширяемый класс реализует особенность, которую он может расширять - это особенность, как и любая другая особенность класса, и его следует рассматривать как единое целое, ничем не отличающееся от метода. Все функции должны быть тщательно продуманы, чтобы гарантировать, что они соответствуют целям клиента, использующего эту функцию. Функции должны быть разработаны, реализованы, проверены на наличие проблем безопасности, отлажены, задокументированы и поддерживаться.
Все, что стоит усилий, а усилия обычно требуют затрат денег. Чьи деньги вы тратите? У них может быть мнение о том, следует ли вам использовать эту функцию или нет.
Обычно у вас есть три варианта:
1) Потратьте деньги на эту функцию, чтобы вы были уверены, что она правильная, надежная, безопасная и соответствует потребностям пользователя.
2) Не делайте ничего из вышеперечисленного, но отправляйте эту функцию в любом случае и надеемся, что доставка незапланированной, быстро внедряемой, непроверенной, недокументированной, незарегистрированной функции с неизвестными рисками безопасности не нанесет вреда вам, вашему работодателю или вашим клиентам.
3) Печать класса. Распечатайте его позже, если вы обнаружите, что (1) был правильным выбором.
Я говорю, что (3) стоит своих денег. Я всегда опечатываю каждый класс, который я пишу, который не был разработан для расширяемости.