私はJavaが初めてです。コードを構造化しようとしているときに、Java はソース ファイルの編成 (ディレクトリ構造) をパッケージ構造に、パッケージ構造をクラスの外部可視性 (クラスは他のすべてのパッケージから可視であるか、まったく可視ではない) に密接に結び付けていることを発見しました。
これにより、適切なカプセル化を維持しながら、公開ライブラリの内部実装の詳細を関連する機能の論理ユニットに編成することが非常に困難になります。JSR 294はそれを最もよく説明しています:
現在、実装は複数のパッケージに分割できます。このような実装のサブパーツは、周囲のソフトウェア環境よりも、相互に緊密に結合する必要があります。今日、設計者は、実装の他の部分で必要とされるプログラムの要素を public として宣言することを余儀なくされています。
または、実装全体を 1 つのパッケージに入れることもできます。これは上記の問題を解決しますが、扱いにくく、すべてのサブパーツのすべての内部を相互に公開します。
私の質問は、この制限に対してどのような回避策があり、長所と短所は何ですか? JSR で 2 つ言及されています。論理グループ化にパッケージを使用します (カプセル化に違反しています)。すべてを 1 つのパッケージに入れます (扱いにくい)。これらの回避策に他の長所/短所はありますか? 他の解決策はありますか?(OSGi バンドルについては漠然と認識していますが、それらがどのように機能し、長所と短所が何であるかを理解するのは難しいことがわかりました (おそらくそれは短所です)。通常のパッケージに比べて非常に煩わしいようです。開発と展開へ。
注:私は良い答えに賛成票を投じますが、最良の答えは、他の人の長所と短所を包括的に折り畳むものです(盗作!)。
関連する (ただし、重複しないでください!) 質問
「重複の可能性」の叫びを予想して、SOで見つけた同様の質問を次に示します。参考のためにここにそれらを提示し、私の質問に答えない理由を説明します.
- Java : jar ファイル内の単一のパッケージのみを公開する : 方法を尋ねますが、Java の現在のリリースでは不可能であるため、回避策については説明しません。Java 8 での今後のモジュール化 (Project Jigsaw)への興味深い指針があります。
- パッケージと可視性- 基本的に上記の重複した質問。
- 「.internal」パッケージへのアクセスを制御するためのベスト プラクティス- 質問と回答は、OSGi または Eclipse プラグインに固有のようです。