ソフトウェア開発では、私たちは皆、ソフトウェア プロバイダーのライブラリを使用しています。クラス A には、x、y、z の 4 つの関数があるとします。開発チームに関数 x の使用を避けてもらいたいだけです。そこで、使わないように言う代わりに、私はアイデアを見つけました。クラスを継承し、すべての関数をオーバーライドします。関数 x についてはサポートされていないメソッド例外がスローされ、残りについてはスーパー メソッドを呼び出しています。そこでも問題が見つかりました。開発者は基本クラス A を直接使用できます。クラス A が直接使用されないようにする方法です。OSGi で同様の機能を見つけました。lib バンドルを取り込んでからエクスポートしないなどです。これを達成する方法はJavaですか?
4 に答える
これらの理由からコードレビューが存在すると思います。第三者のソースを編集できない状況を考えてみます。どうしますか? Siddharth が言うように、それをサブクラス化し、意味のある例外をスローして、明確な理由とともに文書化します。その後も誰かがベースクラスを使っているとしたら、それは無知ではなく、好奇心からかもしれません。そのようなことは、個人的にも学習のためにも評価できますが、プロジェクトのために開発者はガイドラインに従う必要があります。
複雑なソフトウェア ソリューションよりも、開発者に何をすべきかを単純に伝える方が好ましいと思います。シンプルな方が良い場合もあります。
ただし、この道を進むことを主張する場合は、Spring ユーザーであれば、アスペクトを使用してアーキテクチャ標準を強制することができます。問題のあるメソッドを、呼び出された場合に例外をスローする側面で織り込みます。
16 進エディターでライブラリ クラス ファイルを編集し、そのアクセス修飾子をパブリックからパッケージ プライベートに変更できます。また、名前を変更してから、継承を使用してこのクラスをラップすることもできます。ここでは、クラス ファイルの仕様を見つけることができます。この手法を試して、jdbc ドライバー クラスを、追加のログ記録やその他の便利なトリックを提供するラッパー クラスに置き換えました。
書式設定、デッド コード、変数の命名規則など、ソース コードが特定の規則に従っているかどうかをチェックするさまざまなツールがあります。Java で人気のあるツールには、Maven Enforcer プラグイン、checkstyle、およびPMDが含まれます。
これらにより、特定のメソッド呼び出しを禁止するルールを作成できる場合があります。次に、コンパイル時に自動的にチェックできます。私の知る限り、残念ながら、上記のツールはどれも「不正なメソッド呼び出し」をサポートしていません。ただし、少なくとも PMD の場合、新しいチェックを作成するのはかなり簡単です。