不変クラスのメンバーはアクセサメソッドを持っているか、公開することを許可すべきか?

Fering:

私は最高のデザインの実践について質問があります。私は、彼らが長期的に維持する方が簡単だった読んで、これをテストしたかったので、私のプロジェクトに多くの不変のコンポーネントを構築しようとしてきました。

あなたは不変のデータメンバを持つクラスを持っている、と言います

 public/private final int importantNumber = 3;

int型はまだプライベートとして宣言し、アクセサメソッドを与えられた、またはその決勝ので、直接アクセスが可能になり、それが公共の製作に難しいものですすべきですか?あなたはそれを変更することはできませんので、私はそれに問題が公開されて表示されません。

私の場合には、不変オブジェクトは、それに渡された値を使用して作成された後、自己のすべてが、最終的なもので、データベースから他の人を投入します。

それともこれは単に好みの問題と宗教戦争の火付け役になるのですか?クラス内からデータメンバへのアクセスについての質問がたくさんあるように、私はそれが私が値を取得しようとする別の外部のクラスからお願いいたしますことを明確にしたいです。

GhostCat敬礼モニカC.:

物事は公共作ることができ、他のコードがそれに依存します。

データは可変または不変であるかどうかは問題ではありません。すぐにいくつかの他のコードは、自身が行うように依存し、その情報には、将来の問題を有効にします。そして、いずれかの大規模プロジェクトでは、これらの問題はなります遅かれ早かれ現れます。

物事は公共作り、すべての突然の、(内部)実装の詳細は、他のコードの中に漏れることができます!そしてもちろん:そのデータが可変であれば、それはちょうど開き、実際のワームの缶を。

しかし、たとえシンプルでif (someObject.someField == whatever) then do this else do thatすぐに大きな問題になることができます。ちょうどあなたがあなたの巨大なプロジェクトでは10、50、100の異なる場所でそのコードを持っていると仮定します。

このように、あなたのデフォルトのルールがある:あなたの情報を非表示にします。物事が作る公衆がある例外あなたは絶対にあなたのデザインがそのようになりたいので、それが起こります。あなたのデフォルトはまだあなたがあなたの要件を実装することを可能にすることを最も限定的な可視性を自分のフィールド(とさえメソッド)を与えることです。

ノート:それはちょうど「少し」より優れたフィールドを非表示にし、そのためのアクセサメソッドを持つことです。そのためif (someObject.someMethod() == ...)に、リードと同じ問題。そして、(ほぼ)より悪い:今、あなたはそれが決めるsomeMethod()一つの特定の問題を解決するために、別の何かを行う必要があります。しかし、あなたは確信している他のその変化とそのメソッド呼び出しの作業罰金の99件の用途!

最終警告:あなたは今、最終的には何かを公​​開持つことができるが、あなたのモジュールの外部からまだ使用可能ではありませんので、Javaの9は、モジュールの概念を導入しました。しかし、多くの理論的な補遺のである、私はまだ基​​本ルールで行くと、私はそうする正当な理由がない限りない物事が公共になるだろう。あなたは情報、ユニットテストのために言っていることをアクセスしたい場合は、パッケージ保護されたゲッターを行う必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178598&siteId=1