1. ホーム
  2. design-patterns

[解決済み] ユーティリティクラスは悪なのか?[クローズド]

2022-11-02 12:04:29

質問

こんな質問を見かけました。 もし、"Utilities" クラスが悪であるなら、私はどこに私のジェネリックコードを置くべきですか?

そして私は考えました、なぜユーティリティクラスは悪なのか?

例えば、何十クラスもあるドメインモデルを持っているとします。 インスタンスをxml化できるようにする必要があります。 親クラスにtoXmlメソッドを作るか? MyDomainXmlUtility.toXmlヘルパークラスを作るか? これは、ビジネスニーズがドメインモデル全体にまたがる場合ですが、本当にインスタンスメソッドに属するのでしょうか? アプリケーションのXML機能に関する補助的なメソッドがたくさんある場合はどうでしょうか?

どのように解決するのか?

ユーティリティクラスは正確には悪ではありませんが、良いオブジェクト指向の設計を構成する原則に違反することがあります。良いオブジェクト指向設計では、ほとんどのクラスは単一のモノとその属性および操作のすべてを表すべきです。もし、ある物に対して操作するのであれば、そのメソッドはおそらくその物のメンバーであるべきです。

しかし、ユーティリティクラスを使っていくつかのメソッドをグループ化できる場合があります - 例として java.util.Collections クラスは、任意のJavaコレクションで使用できる多くのユーティリティを提供します。これらは、1 つの特定のタイプのコレクションに特化したものではなく、代わりに任意のコレクションで使用できるアルゴリズムを実装しています。

本当に、あなたがしなければならないことは、あなたの設計について考え、どこにメソッドを置くのが最も理にかなっているかを決定することです。通常、それはクラスの中の操作としてです。しかし、時には、ユーティリティクラスとして使用することもあります。ただし、ユーティリティクラスを使用する場合は、適当にメソッドを放り込むのではなく、目的や機能ごとにメソッドを整理してください。