Борьба с повторами PDF Печать E-mail

(В оригинале - Fight repetition)

Ваши разработчики выполняют повторяющиеся задачи, не задумываясь? В вашем коде встречаются повторяющиеся фрагменты? А код, написанный в стиле «Копипаст»? Если да, то ваша команда движется вперед гораздо медленнее, чем могла бы, и как ни странно, возможно, что причина этого – вы сами.

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

  1. Повторение – это зло.
  2. Повторящаяся работа замедляет процесс написания ПО.

Как архитектор, вы задаете тон. В ваших руках вся власть над системой, и возможно, именно вы спроектировали задающий направление срез системы, служащий примером для команды – примером, который будет скопирован многократно. Когда разработчик копирует что-нибудь, будь то несколько строк кода, XML-файл или класс, это явный индикатор того, что что-то можно сделать проще или даже вынести отдельно. Чаще всего копируется не логика предметной области, а код, обслуживающий инфраструктуру. В связи с этим очень важно предвидеть эффект от ваших примеров. Как код, так и конфигурация из примера будут основой для десятков, сотен или даже тысяч других частей этой системы или других систем. Поэтому ваш код должен быть максимально прозрачным, ясным и не содержать ничего повторяющегося и лишнего, кроме решаемой проблемы. Как архитектор ПО, вы должны обладать высочайшей чувствительностью к любым повторяющимся шаблонам, поскольку все, что вы напишете, будет повторяться :)

Но в вашей системе ничего этого нет, не так ли? Тогда посмотрите внимательней на конфигурационный файл. Что изменится, а что останется, если его применить к другой части системы? Посмотрите на прослойку бизнес-логики. Есть ли там шаблон, повторяющийся от метода к методу, вроде обработки транзакций, логирования, аутентификации или аудита? А если посмотреть в уровень доступа к данным? Не найдется ли там кода, отличающегося лишь именами полей? Посмотрите шире. Не найдется ли нескольких строк кода, часто стоящих рядом друг с другом и оставляющих ощущение повторяемости, даже если они используются в различных местах и с разными объектами? Все это примеры повторений. Разработчики привыкают «фильтровать» повторы при просмотре кода, как только определят, в чем отличия, но даже в этом случае они все равно снижают свою эффективность. Код, написанный так, написан для выполнения компьютером, а не для чтения разработчиком.

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

И этот кто-то – это вы.

Автор оригинала - Niclas Nilsson