私はコーディングアウトラウドの回答に投票しましたが、少し拡張したいと思います。
クラスでコレクションをラッピングすることは、私がいつもやろうとしていることです。私のルールは、「ネイキッドコレクションを絶対に通過させないこと」です。私が見たOOの最大の失敗は、所属するメソッドを追加することを人々が恐れている場合です。あなたの場合、メソッドはコレクションに属します(考えれば明らかですが)、それらをコレクションにラップしてそこに配置し、アイシングをケーキに配置するには、必要な機能のみを新しいクラスの外部に公開します(codingoutloudとして)そうしたので、あなたはあなたの単一の小さなクラスを見て、そのコレクションを操作するすべてのものを簡単に理解することができます。
すべてのコードであるため、考えられるすべての問題を解決する必要はありません。コレクションラッパーは、それとやり取りする他のクラスを編集するのと同じくらい簡単に編集できます。これにより、必要に応じて他のコードをクラスに取り込むことができます。コレクションを公開しないと、ラッパーに属するコードがすぐにわかります。
これにより、コレクションを完全に制御できるため、コレクションの機能と矛盾する状態になるのを防ぐことができます(たとえば、コレクションのエントリがnullになり得ない場合は、誰かがnullを入力できないようにするだけです!)
私が今まで見た悪いOOコードのほとんどは、変更可能な独自のコードで問題のオブジェクトをラップするのではなく、コードを追加できないオブジェクトに属する静的ユーティリティまたはインラインコードを作成することを選択したために作成されました。