Я должен изолировать все классы, которые я знаю, никогда не должен использоваться в качестве базового класса, даже когда нет никакой материальной производительности или проблем безопасности, или это просто добавляет хлам?
Класс, который является расширяемым, реализует функцию, которую она может быть расширена - это функция, такая функция, как и любая другая особенность класса, и следует обрабатывать как один, ничем не отличается от способа. Все функции должны тщательно продумать, чтобы они соответствовали целям клиента, используя функцию. Особенности необходимо спроектировать, реализуемые, просмотренные для проблем с безопасностью, отлаженные, документированные и обслуживаемые.
Все, что стоит усилий, и усилия обычно требуют затрат денег. Чьи деньги вы тратите? У них может быть мнение о том, должен ли вы сделать эту функцию или нет.
В основном у вас есть три варианта:
1) Потратьте деньги, чтобы сделать эту функцию, чтобы у вас есть уверенность, что она правильная, надежная, безопасная и соответствует потребностям пользователей.
2) Поделайте ни одно из вышеперечисленного, а в любом случае, не отправляйте функцию и надеемся, что доставка незаметной, быстро реализованной, непроверенной, недокументированной, ненаправленной функцией с неизвестными рисками безопасности не наносит вреда вам, вашего работодателя или ваших клиентов.
3) Уплотнение класса. Отменить это позже, если вы обнаружите, что (1) был правильным выбором.
Я говорю, что (3) - это хорошее соотношение цены и качества. Я всегда закрываю каждый класс, который я пишу, который не был предназначен для расширяемости.
Да. Если ничего другого это указатель, позволяющий другим знать, что они не должны идти дальше вниз по тропе.
Настройка класс, который должен быть запечатан
, не является жестким, поскольку это устанавливает строгое правило в коде: Этот класс не может быть унаследован.
Код является жестоким только в том случае, если он является ненужным и запутанным.
Одна из школ мысли (и простое правило) заключается в том, что вы всегда должны заклеивать все классы, так как их легко раскрыть, если это необходимо, но не наоборот. Некоторые генераторы кода делают это автоматически. (См. вариант Эрика Липперта № 3 выше. В основном говорится то же самое.)
-121--1090290- Вы используете < p >
, < h * >
, когда они необходимы, чтобы они были правильными.
Что плохо, так это использование div вместо соответствующего элемента. Здесь такого нет.
-121--1010841-Я бы не считал, что это добавление cruft вообще. Вместо этого вы ясно выражаете свои намерения для класса.
Классы должны быть предназначены для наследования или должны быть запечатаны. К сожалению, классы не запечатаны по умолчанию в C #, поэтому необходимо включить ключевое слово самостоятельно. Лично я предпочел бы ключевое слово, чтобы явно сделать классы доступными для наследования, поскольку это помешало бы людям использовать класс в качестве базового класса, если он не был явно помечен как таковой.
Установка класса Герметичный
не Cruft с тех пор, как это устанавливает строгое правило в вашем коде: этот класс не может быть унаследован.
код только Cruft, если это ненужное и запутанное.
Это сказал, что одна школа мысли (и простого правила) заключается в том, что вы всегда должны запечатать все классы, так как это легко отменить, если это необходимо, но не наоборот. Некоторые генераторы кода делают это автоматически. (Свидите опцию Эрика ЛППППП № 3 выше. Это в основном говорит о том же.)