9

背景: 多くのプロジェクトでは、内部コードのほとんどすべてのクラスが public であり、必要がない場合でも final ではないことに気付きました。ただし、この決定をデフォルトで行うのではなく、実際にシステムの他の部分から使用することを意図している場合にのみ、クラスをパブリックにすることが賢明だと思われます。パッケージで保護されたクラスを持つことは、モジュール間の境界を強制するための簡単なメカニズムであり、クラスの使用目的に関するドキュメントとして機能します。

プログラムを壊さずに保護できるすべてのクラスを保護し、サブクラスを持たないすべてを最終的なものにする (できれば無料の :-) ツールがあれば、保護メカニズムを意識的に使用するための良い出発点になるでしょう。(もちろん後で微調整する必要があります。) そのようなツールを知っていますか?

警告: OSGI や計画中のスーパーパッケージなど、より優れたモジュール化メカニズムがあることは承知しています。しかし、現在の多くのプロジェクトでは、これはオプションではなく、単純な古い Java メカニズムを使用することは簡単にできることです。また、これは、コードの所有権を共有している (必要に応じて誰もがパブリックに戻すことができる) 場合にのみ機能し、他のユーザーが使用するライブラリではなく、最終製品を開発している場合にのみ機能します。また、物事を最終的なものにすることの利点についてもよくわかりません-これにより、AOPとモックが防止されます。

明確化:私が言ったように、私はフェンスを越えて変更できない人に投げ出されたライブラリについて話しているのではなく、必要に応じてすべてを変更およびリファクタリングすることが奨励されている中規模プロジェクトの内部コードについて話している. package protected または final について話しているときは、「誰かがそれらの制限を解除する必要があると感じるまで保護されている」と考えてください。ツールによって設定された制限を解除する必要があると感じた場合は、それを歓迎します。

4

2 に答える 2

2

そのようなツールがあったとしても (ない)、優れたプログラマーは使用しないでしょう... アクセス仕様は、プログラマー自身が最もよく理解し、解決する設計上の問題です。考えてみてください...プログラムを作成してツールを実行し、すべてをソートします(ツールがプログラムを実際に理解するために最初に非常にインテリジェントであると仮定します)..次に、それを変更することにします...いくつかのクラスを拡張しますなど..最終的なクラスを拡張し、プライベート クラスのオブジェクトを作成することになります..(これらは直面する多くの問題の一部です)...

事は..ツールがその仕事をするとき、あなたはもはやあなた自身のプログラムを理解していないでしょう.

結論.. 設計上の問題を解決するためのツールを探すのはやめてください.. (プログラムを自動的にデバッグするツールを求めるようなものです)

于 2012-10-26T14:28:46.287 に答える
1

EclipseのATLを見ることができます。ATLは、異なる種類のモデル間のモデルからモデルへの変換を作成するために使用されますが、ソースモデルとターゲットモデルが同じタイプでないという制限はありません。現在のクラスを保護または最終的にするJavaからJavaへの変換を作成できます。MoDiscoは、例を見たい場合に備えて、Eclipseのツールセットです。

于 2012-10-29T07:22:00.063 に答える