ヘルパークラスとユーティリティクラスの違いは何ですか?


115

クラスXHelperまたはXUtilsの呼び出し方法をどのように決定しますか?

私の心に:

ヘルパークラスは、インスタンス化してビジネス作業を行うことができるクラスです。

Utilsクラスは、一種のインスタンスで小さな繰り返し操作を実行する静的クラスです(Utilsクラス ArrayUtilsまたはApacheのIOUtilsの例)


5
ここでの主な違いは「ビジネスワーク」です。Utils組織内、または別の組織内のどこでも使用できる静的クラスに使用すると便利な規則だと思います。Helperクラスは、プロジェクト内で再利用することができる共通のコードを有しており、プロジェクト内の依存関係を有しています。もちろん、一般的に受け入れられているルールはありませんが、これは便利だと思います。
Stephen Hosking

1
@StephenHoskingあなたの説明は私にとって、そしておそらく誰にとっても最も説得力があります。可能であれば、コメントを残すだけでなく、この投稿に対する実際の回答として説明を投稿してください。
Bigair

@Bigair。ありがとう、でも私のものは提案であり、答えではありません。私は人々がそれが役に立ったと思ってうれしいです。
Stephen Hosking

回答:


101

使用する命名スタイルはたくさんあります。Utilsがより一般的であるという理由だけで提案します。

Utilityクラスは静的メソッドのみを持ち、ステートレスであると理解されています。そのようなクラスのインスタンスは作成しません。

ヘルパーはユーティリティクラスにすることも、ステートフルにすることも、インスタンスの作成を要求することもできます。できればこれは避けます。

名前をより具体的にすることができる場合。たとえば、並べ替えメソッドがある場合は、XSorterにします

配列の場合、次のようなヘルパークラスを見つけることができます

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

ところで、ユーティリティクラスの省略形はインスタンスのない列挙型です

enum XUtils {;
    static methods here
}

インターフェイスを実装する必要がある場合は、ステートレスシングルトンを使用します。

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

この記事では、私、このstackoverflow.com/a/2135797/787698、Xutilsは依存関係のない静的なクラスであること。それについてどう思いますか?
jakcam 2012

@jakcam興味深い点。ヘルパーはステートフルでインスタンスを必要とする場合があります。可能であれば、ステートレスでインスタンスレスのユーティリティクラスを使用します。
Peter Lawrey、2012

Xutilsが理解しているのは、依存関係のない静的クラスです。
jakcam 2012

その投稿で「xutils」または「依存関係なし」を見つけることができません。
Peter Lawrey、2012

1
@Johnその場合、テストの目的でモックアウトするのが難しいため、ユーティリティメソッドは望ましくありません。
Peter Lawrey、2016年


8

ユーティリティは、一般的に使用される「リーフノード」クラスです。つまり、プロジェクトへの依存関係がなく、壊れたり役に立たなくなったりすることなく、プロジェクト間で移植できます。例:Vector3RandomNumberGeneratorStringMatcher、等...

「ヘルパー」は、別のクラスを支援するように設計されたクラスのようです。これらはプロジェクトに依存する場合としない場合があります。GameNetworkClientクラスを作成している場合、そのGameNetworkConnectionクラスは「ヘルパー」であると言えるでしょうGameNetworkClient

開発者がツールを参照する方法は、これらの単語の一般的な使用法を反映しています。「役に立つ」と「役に立つ」で説明されている補聴器を思い出すことができる場合、役に立つツールにはコンテキストがある傾向があります(チーズおろし金はチーズをすりおろすのに役立ち、コーンストリッパーはトウモロコシを取り除くのに役立ち、スピードローダーは小火器のリロードに役立ちます)。「ユーティリティ」は、さまざまなコンテキスト(WD-40、ダクトテープ、アーミーナイフ、接着剤、懐中電灯など)で機能することが期待されています。


4

イェスパーが言ったように、それは完全に恣意的です。あなたはあなたの組織のために何がうまくいくかを考え、それを慣例にすることができます。

私にとって、それはこのようなものです:

utils-どこにでも自由に移動およびインポートできる静的クラス。

さまざまなモジュールで役立つ可能性のある一般的なタスクを実行する。Peter Lawreyが言ったように、より具体的な名前が役立ちます。

ヘルパー -クラス助けて他のクラスやモジュールを。

配置されたモジュールでのみ使用され、他の場所にインポートしても意味がないタスク。その名は、より具体的な可能性- ModuleNameのヘルパー(例えばAdministrationHelperLoginHelper


2

これに対する究極の答えはありません。1つの命名規則を理解し、それを使用します。パッケージとクラスに名前を付けることはソフトウェアアーキテクチャの重要な部分であり、誰もあなたからその決定を奪うことはできません。

個人的にはXHelperの方が好きですが、外部コードでXUtilsをより頻繁に見ます。

また、JDKとGuavaの両方にある「複数」の命名方式も気に入っています。

クラスがCollectionオブジェクトを扱う場合、それは呼び出されますCollections

配列>配列(jdk)
リスト>リスト(グアバ)
マップ>マップ(グアバ)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.