Про принцип
DRY рассказал, но кто-нибудь слышал про обратный ему принцип
WET?
Принцип о том, что нужно повторяться. Можно воспринимать принцип по-разному, как полную противоположность DRY и принять для себя «сухую» или «влажную» сторону. А можно попытаться сесть на оба стула, обозначив, что принцип WET на самом деле о том, что повторяться нужно и можно там, где это необходимо.
Например, где не нужно повторяться, я описал в
принципе DRY. А вот пример, когда повторение может пригодиться. Вы пишите новый сервис, алгоритм, проект и вы понимаете, что у вас много задублированных строк кода, что вы сделаете? Правильно, вы же следуете принципу DRY, вы пойдете писать абстракцию, которая выполняет этот дублирующийся код.
Проходит время, добавляются новые условия, меняются требования, все дублирующиеся куски, которые вынесены в абстракцию уже далеко не полностью подпадают под нее. Что делать? Можно упороться, наколбасить миллион условий в эту абстракцию и все лишь бы остаться «сухим». Как следствие вы нарушаете принцип
KISS, да еще и получаете сложно поддерживаемый кусок алгоритма.
Вот именно для таких случаев и существует принцип WET, правильным будет создать еще одну абстракцию или даже не одну. Да, появится какое-то дублирование кода/алгоритма, но зато вы не накрутили стремное усложнение, кучу лишних проверок там, где это не нужно. И вообще вам тестировщики еще спасибо скажут)) Как, собственно, и потомки, которые будут дорабатывать это)))
Поэтому, возвращаясь к принципу WET. Главное запомнить, что как всегда и везде важна здоровая рациональность. Нужно стараться не повторяться, но это не должно прерваться в принцип ради принципа.
#словодня и #быстростатья