Должен ли я рекомендовать классы запечатывания по умолчанию? - PullRequest
63 голосов
/ 17 июня 2011

В большом проекте, на котором я работаю, я рассматриваю рекомендации другим программистам всегда запечатывать свои классы, если они не продумали, как их классы должны быть подклассифицированы.Часто менее опытные программисты никогда не учитывают это.

Я нахожу странным, что в java и c # классифицируются как неопечатанные / не финальные pr по умолчанию.Я думаю, что закрытые классы значительно улучшают читабельность кода.

Обратите внимание, что это внутренний код, который мы всегда можем изменить в случае редкого случая, когда нам нужно создать подкласс.

Каковы вашиопыт?Я встречаю некоторое сопротивление этой идее.Неужели люди, которым лень их не удосужиться напечатать, «запечатаны»?

Ответы [ 13 ]

1 голос
/ 17 июня 2011

Твой дом, твое правило.

Вместо этого вы можете использовать дополнительное правило: класс, который может быть разделен на подклассы, должен быть аннотирован;никто не должен создавать подкласс класса, который так не аннотирован.Этому правилу не сложнее следовать, чем вашему правилу.

1 голос
/ 17 июня 2011

Основная цель запечатанного класса - отнять у пользователя функцию наследования, чтобы он не мог получить класс из запечатанного класса. Вы уверены, что хотите это сделать.Или вы хотите начать делать все классы запечатанными, а затем, когда вам нужно сделать их наследуемыми, вы их поменяете ... Ну, это может быть хорошо, когда все в доме и в одной команде, но в будущем другие команды будут использовать ваши dll.будет невозможно перекомпилировать весь исходный код каждый раз, когда класс должен быть распечатан .... Я не рекомендую это, но это только мое мнение

1 голос
/ 17 июня 2011

Я считаю, что запечатанные / заключительные занятия на самом деле довольно редки, по моему опыту; Я, конечно, не рекомендую предлагать всем классам быть запечатанными / окончательными по умолчанию. Эта спецификация делает определенное утверждение о состоянии кода (то есть, что оно завершено), что не всегда верно во время разработки.

Я также добавлю, что для того, чтобы оставить класс незапечатанным, требуется больше усилий по разработке / тестированию, чтобы удостовериться, что выявленное поведение хорошо определено и протестировано; Тяжелое модульное тестирование крайне важно, IMO, для достижения уровня уверенности в поведении класса, который, по-видимому, желателен сторонникам «запечатывания». Но IMO, этот повышенный уровень усилий напрямую влияет на высокий уровень доверия и более качественный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...