リファクタリングコメント付きのコードを広めることは良い考えですか?


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>>>>();

これはいいアイデアですか?その際、何に注意する必要がありますか?



3
これは意見に基づくトピックです。しかし、私の個人的な意見は、これはまさに有用なコメントのタイプであり、他の人のコードで見つけられることを望んでいるということです。ないどのような方法ではありませんが、なぜ
キリアンフォス

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

5
なぜコードが臭いのように見えるのを教えてくれるコメントは非常に高く評価されています。私はコードベースを理解していないかもしれないので、問題を見て「何をするの?」と考えますが、それがなぜそうなっているのかを説明するコメントは、コードを素早く回避するのに役立ちます。はい、非常にこれを行います。(もちろん、コードをWTFではないように修正できないと仮定して!)
Phoshi

回答:


13

リファクタリングコメント付きのコードを広めることは良い考えですか?

リファクタリングを完了するための時間を割り当てており、本当にそれを行う場合、はい-それはうまくいきます。

その際、何に注意する必要がありますか?

最新のIDEには、TODO行を検索して表示するオプションがあります。あなたは時々それらをチェックし、可能な限りそれらの数を減らすようにしてください。


2

doxygenの/// @todoコメントやjavadocのインストールが簡単なカスタムタグを考慮して、APIドキュメントのtodoセクションに自動的に抽出されるようにします。単純なコメントは見過ごされやすく、最終的にはコードの深部で失われます。


[編集]ところで:これはいいアイデアですか:

バグを修正し、新しい機能を実装している間、コードをユニットテスト可能にするためにリファクタリングも行います

リファクタリングは非常に危険な場合があります(特に単体テストがない場合)。そのため、todoコメントを追加する際の余分な作業(バグの修正時など)を制限した方がよいでしょう...


質問のコードスニペットはJavaのようになっていますが、なぜDoxygenをお勧めしますか?
gnat

私はdoxygenが@todoをサポートしていることを知っていました-javadocの場合は確信が持てませんでした-しかし、言語は本当に重要ですか?私の観点から見ると、Javaの例はより深い問題を示しています。
ウルフ

1
@gnat:今はもっと良いと思いますか?
ウルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.