web-dev-qa-db-ja.com

Javaで非推奨にするタイミングと削除するタイミング

リファクタリングの取り組みの一環として、または現在進行中の開発の一環として、特定のメソッドまたはクラス全体が、ある意味で時代遅れになる可能性があります。 Javaは@Deprecatedアノテーションをサポートしており、問題の機能を処理するためのより良い方法がある可能性があることを示しています。これは、APIの一部を削除する効果が存在するパブリックAPIで特に役立つと思いますAPIが不明である可能性があります。非公開APIとリビジョン管理システムを使用するプロジェクト(つまり、削除をある意味で元に戻すことができる)の場合、廃止された要素を削除するのではなく非推奨にするのが適切なのはいつですか?

11
Michael McGowan

APIは公開APIですか?これにより、廃止または削除する必要があるかどうかが決まります。 APIがあなたの利益のためだけにある場合(つまり、社内でのみ使用される場合)、問題のコードを削除するのが最善です。それはずっとクリーンで、長期的にはメンテナンスの頭痛の種を減らすでしょう。

ただし、APIが公開されている場合、メソッドを削除するだけで、古いバージョンのライブラリで機能していたコードが機能しなくなる可能性があります。混乱するところです。以下はいくつかのガイドラインです。

  • 内部API:非推奨ではなく削除。クライアントが内部クラスまたはメソッドを使用している場合、ツールが壊れるとクライアントの責任になります。
  • 外部API:最初に非推奨、後で削除。非推奨は、後で何かが削除されることを示すフラグです。後であなたが合理的であると信じるものに依存します。非推奨のコードを実際に削除する前に、少なくとも2〜3個のバージョンを指定してください。
18
Berin Loritsch

クラスまたはメソッドを@deprecateするときは、リマインダーを設定することをお勧めします。あなたはその陳腐化を促進するためにそれをしています。そのため、すべての参照を削除するために、タスクを実行するまでの時間に、どのくらいの時間がかかるかを推測してください。 @deprecatedとしてマークし、カレンダーにリマインダーを入れます。リマインダーを受け取ったら、確認してください。不要になった場合は削除してください。すばやく更新できる参照がいくつか残っている場合は、それを実行してアイテムを削除します。さらに重要な作業が残っている場合は、リマインダーを少し前に出します。

これを十分に行うと、プロジェクト内のクラスまたはメソッドを削除するのにかかる時間の感触が養われます。

6
Carl Manaster

IMHOだれもそれを使用しておらず、決して使用しないことを確認できる場合は、削除してください。 (これは、リフレクション、またはVelocityマクロなどの外部コンポーネントがある場合は注意が必要です。IntelliJなどの最新のIDEは、JSPなどでリフレクションやVelocityを介さずに参照を見つけることができます。)

より良い代替手段はあるが、古いものがまだ多くの場所で使用されており、現在すべてのクライアントコードをリファクタリングする時間がない場合は、廃止されたクラス/メソッドを@deprecateするのが適切です(適切なコメント好まれる代替案)。

5
Péter Török