[Из песочницы] Атака клонов. Как бороться с дублированием кода?

ac18659d087ec5bbc4261c74f732fabb.png

Комментарии (2)

  • 8 августа 2017 в 17:09

    0

    Во-первых, говоря о компилируемых языках программирования, никакой потери производительности быть не должно. Если она и есть — это камень в огород автора оптимизаций в компиляторе.
    Да и интерпретируемые языки в наши дни тоже, в большинстве случаев, никакой потери производительности не понесут.
    А если ещё вспомнить что частоты современных процессоров измеряются гигагерцами, то лучше заняться оптимизацией в других местах.

    Во-вторых зависимости, которые вы сами поддерживаете, чем-то плохим не считаются.
    Каждый экземпляр копипасты, по такой логике, тоже является зависимостью. Программа же не будет работать если его выкинуть.
    Так что тут имеет место сокращение зависимостей от собственной лени.

    В-третьих, про ошибки просто чушь собачья. Чтобы не было таких ошибок — код нужно тестами покрывать.
    Одна ошибка в одном месте исправляется за один раз.
    Исправлять кучу одних и тех же ошибок в разных местах — вот где можно наделать новых или просто пропустить старых. Тем более если про тесты не слышали.

    • 8 августа 2017 в 20:02

      0

      В целом я с Вами согласен, но все-таки я бы не был так радикален.

      Например, если говорить про падение производительности, то оно скорее связано не с вызовом новых функций (это действительно хорошо оптимизируется), а с созданием новых объектов или излишней обобщенностью. Но, действительно, преждевременная оптимизация — корень всех бед, и для большинства проектов — это не проблема.

      С зависимостями совсем все неоднозначно. Там всё становится плохо, если дубликаты расположены в разных модулях. В статье была ссылка на неплохое рассуждение на эту тему. Если вкратце, то мысль такая — стоит ли создавать новую зависимость (и поддерживать ее) ради нескольких строк кода? Хотя я скорее бы предпочел явную зависимость, чем неявную в виде клонов. Но этот вопрос довольно много обсуждается.

      Про ошибки я не совсем понял. Если речь о примере 3, то чушь собачья — это то, что такие ошибки существуют? Данный пример ведь из реального довольно популярного проекта Spring, там и тесты есть. Конечно, исправлять ошибки во всех дубликатах — это чревато, об этом и пример.

      В любом случае, спасибо что внимательно прочитали статью.

© Habrahabr.ru