Что такое антишаблоны проектирования?


#1

На сайте вопросов на собеседования встретил такой интересный вопрос, на который не нашёл ответа:

Что такое антишаблоны в контексте шаблонов проектирования, и какие антишаблоны вы знаете?


#2

Антишаблоны (или анти-паттерны) проектирования - это полная противоположность шаблонам проектирования (или паттернам проектирования). Если последние были придуманы как показатель хорошего написания кода, то анти-паттерны - то , как код писать не нужно.

Итак, о практиках плохого кода (я назову только 2 из них, как по мне, самые популярные. Про остальные можете почитать на ре: ):

1. Копи-паст. Да, используется сплошь и рядом. Да, наверное самый старый и проверенный временем подход к программированию. Однако это не значит что это допустимо, а недопустимо это потому что:

1.1) Ухудшается поддержка и переносимость кода. При копи-пасте как правило программист не совсем знает что написано в том коде, и по этому впредь поддержка и переносимость кода ухудшается (ну или разработчик так или иначе будет тратить уйму времени что б понять уже кем-то написанный код)

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

1.3) Код ревью значительно усложняется, поскольку кода становится значительно больше и без должной на то докумментации.

2. Спагетти-код. Называется он так, поскольку весь код можно представить как миску с перепутанными макаронами спагетти. Примерно так выглядит плохо (или вообще не) структурированный код / система. Понять такой код с первого взгляда абсолютно невозможно, и даже со временем не всегда понятны некоторые участки кода. Зачастую эта "техника" используется вместе с "техникой" копи-паста, что также ухудшает код и делает его абсолютно непригодным к существованию. Если даже случайно вы начинаете замечать что ваш код становится похож на мучные итальянские изделия - не поленитесь переписать данный участок кода, только что б не оставлять этот кусок макарон в своём коде. В противном случае в будущем очень часто такой код "аукается" разработчику и приносит массу неприятных сюрпризов в виде ужасной поддержки кода, невозможности адекватного рефакторинга и невозможности командной работы над вашим проектом.