Чи хороша ідея поширення коду з коментарями рефакторингу?


11

Я працюю над проектом "спагеті-код", і, поки я виправляю помилки та впроваджую нові функції, я також роблю деякий рефакторинг для того, щоб зробити код блоком-перевіреним.

Код часто настільки щільно пов'язаний або складний, що виправлення невеликої помилки призведе до перезапису багатьох класів. Тому я вирішив намалювати рядок десь у коді, де зупиняю рефакторинг. Щоб зробити це зрозумілим, я вводжу кілька коментарів у код, що пояснює ситуацію, наприклад:

class RefactoredClass {
    private SingletonClass xyz;

    // I know SingletonClass is a Singleton, so I would not need to pass it here.
    // However, I would like to get rid of it in the future, so it is passed as a
    // parameter here to make this change easier later.
    public RefactoredClass(SingletonClass xyz) {
        this.xyz = xyz;
    }
}

Або ще один шматок пирога:

// This might be a good candidate to be refactored. The structure is like:
// Version String
//    |
//    +--> ...
//    |
//    +--> ...
//          |
//    ... and so on ...    
//
Map map = new HashMap<String, Map<String, Map<String, List<String>>>>();

Це гарна ідея? Що слід пам’ятати, роблячи це?


1
пов'язані / дублікати: Чи мають сенс коментарі TODO?
гнат

3
Це тема, заснована на думці; але моя особиста думка полягає в тому, що саме такий коментар є корисним, і який я хотів би знайти в коді інших людей: він повідомляє вам важливу інформацію, яка вже не очевидна з коду; не те, що робить метод, а чому .
Кіліан Фот

2
HashMap <String, Map <String, Map <String, List <String> >>>: o
margabit

5
Коментарі, які розповідають, чому фрагмент коду виглядає смердючим, надзвичайно вдячний. Можливо, я не розумію кодової бази, тому я просто побачу проблему і подумаю "Що на хрен?", Але коментар, що пояснює, чому це так, як є, допоможе мені швидше обійти код. Так, дуже багато це роблю. (Припустимо, що ви не можете виправити код, щоб не бути WTF, звичайно!)
Phoshi

Відповіді:


13

Чи хороша ідея поширення коду з коментарями рефакторингу?

Якщо ви виділили час на завершення рефакторингу, і якщо ви дійсно це зробите, то так - це вийде.

Що слід пам’ятати, роблячи це?

У сучасних ІДЕ є можливість знайти та показати рядки TODO. Ви повинні час від часу перевіряти їх і намагатися зменшити їх кількість, коли зможете.


2

Я б робив такі міркування щодо /// @todoкоментарів доксигену або простого в монтажі спеціального тегу для javadoc , тому він автоматично отримується в розділ todo в документах API. Прості коментарі будуть занадто легко помічені і з часом загубляться в глибині коду.


[Редагувати] BTW: це гарна ідея:

Хоча я виправляю помилки та впроваджую нові функції, я також роблю рефакторинг для того, щоб зробити блок коду тестуваним

Я думаю (знаю досвід!), Рефакторинг може бути дуже небезпечним, особливо коли ще немає одиничних тестів. Тож вам краще обмежити вашу додаткову роботу (під час виправлення помилок тощо) щодо додавання коментарів до todo ... Ми всі знаємо: коли це можливо;)


фрагмент коду у запитанні звучить як Java, чому ви рекомендуєте Doxygen?
гнат

Я знав, що doxygen підтримує @todo - для javadoc я не був впевнений - але чи справді така мова важлива? З моєї точки зору, приклад java ілюстрував глибшу проблему.
Вовк

1
@gnat: Ти вважаєш, що зараз краще?
Вовк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.