Есть ли какие-либо преимущества в использовании принципа открытия / закрытия при использовании BDD? - PullRequest
5 голосов
/ 24 января 2011

Кажется, что принцип открытия / закрытия заключается в предотвращении регрессий в объекте или методе. Учитывая, что ваш код покрыт тестами, потому что вы практикуете BDD, это кажется избыточным требованием. Кроме того, кажется, что это вносит дополнительную сложность, требуя расширяемости на уровне API, а не на уровне языка.

1 Ответ

6 голосов
/ 24 января 2011

Абсолютно есть преимущества.Фактически, два принципала (BDD и Open / Closed) предназначены для разных целей.BDD предназначен для руководства процессом разработки, и в этом его преимущества (сокращение сроков, создание более качественного кода и т. Д.).Open / Closed предназначен для выполнения в процессе разработки, но помогает в обслуживании.

Преимущества BDD легко понять.Более короткие сроки начальной разработки означают меньшую стоимость проекта в целом, верно?Неправильно.Основываясь на Правиле 60/60 , 60% стоимости проекта приходится на его обслуживание (а 60% этой стоимости - на изменение требований после развертывания).Поэтому, несмотря на то, что на начальном этапе разработки выгодно экономить, большую экономию необходимо иметь при обслуживании.

И именно в этом случае принцип Open / Closed окупится.Следуя этому принципу, вы сэкономите много времени на обслуживании (поскольку вам не нужно отслеживать неработающие юнит-тесты, потому что вы меняете функциональность метода).

И принцип Open / Closedне столько предотвращение регрессий, сколько предотвращение изменения API, за которым почти невозможно идти в ногу.Если вы заметили, хорошие API никогда не меняются.Они могут быть расширены.Части могут быть устаревшими.Но вы никогда не увидите, чтобы setFoo(string bar) изменилось на setFoo(int bar).Это то, что есть Open / Closed для предотвращения ...

...