web-dev-qa-db-ja.com

Javaのユーティリティクラスの命名規則

Javaでユーティリティクラスを作成する場合、従うべき優れたガイドラインは何ですか?

パッケージは「util」または「utils」である必要がありますか? ClassUtilまたはClassUtilsですか?クラスはいつ「ヘルパー」または「ユーティリティ」ですか?ユーティリティまたはユーティリティ?または、それらの混合物を使用しますか?

標準のJavaライブラリは、UtilsとUtilitiesの両方を使用します。

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities
  • javax.swing.plaf.basic.BasicGraphicsUtils

ApacheはさまざまなUtilとUtilsを使用しますが、ほとんどはUtilsです。

  • org.Apache.commons.modeler.util.DomUtil
  • org.Apache.commons.modeler.util.IntrospectionUtils
  • org.Apache.commons.io.FileSystemUtils
  • org.Apache.lucene.wordnet.AnalyzerUtil
  • org.Apache.lucene.util.ArrayUtil
  • org.Apache.lucene.xmlparser.DOMUtils

Springは多くのHelperクラスとUtilsクラスを使用します。

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

それでは、ユーティリティクラスにどのように名前を付けますか?

107
JR.

このような多くの規則と同様に、重要なことは、使用する規則ではなく、一貫して使用することです。たとえば、3つのユーティリティクラスがあり、それらをCustomerUtil、ProductUtils、およびStoreUtilityと呼ぶと、クラスを使用しようとする他の人は常に混乱し、誤ってCustomerUtilsと入力し、それを検索し、何度かあなたをcur倒しなければなりません。等(私は一度、話者が「1」、「2nd」、および「C」とラベル付けされた3つの主要なポイントで彼のスピーチの概要を示すスライドを置いた一貫性に関する講義を聞いた。)

CustomerUtilとCustomerUtilityのように、スペルの微妙な違いのみが異なる2つの名前を作成することはありません。 2つのクラスを作成する正当な理由があった場合、それらについて異なるものが必要であり、名前は少なくともその違いが何であるかの手がかりを与える必要があります。一方に名前と住所に関連するユーティリティ関数が含まれ、もう一方に注文に関連するユーティリティ関数が含まれている場合、CustomerNameAndAddressUtilおよびCustomerOrderUtilなどを呼び出します。名前の意味のない微妙な違いに気づいたとき、私は定期的に夢中になります。昨日と同じように、「freight」、「freightcost」、「frght」という名前の貨物コストの3つのフィールドがあるプログラムに取り組んでいました。それらの違いが何であるかを理解するために、コードを研究しなければなりませんでした。

74
Jay

このためのJava worldには標準のルール/規則はありません。ただし、@ colinDが述べたように、クラス名の最後に「s」を追加することを好みます。

マスターJava API Designer Josh Blochが行うこと (Javaコレクションとgoogleコレクション)

ヘルパーとUtilが実行されている限り、パッケージの特定の機能を実現するのに役立つAPIがある場合は、ヘルパーと呼びます(パッケージをモジュールの実装と見なします)。 Utilは任意のコンテキストで呼び出すことができますが、.

たとえば、銀行口座に関連するアプリケーションでは、すべての番号固有のユーティリティ静的APIはorg.mycompany.util.Numbers

APIを支援するすべての「アカウント」固有のビジネスルールは、

org.mycompany.account.AccountHelper

結局のところ、それはより良いドキュメントとよりクリーンなコードを提供することの問題です。

27
ring bearer

型がインターフェイスまたは制御できないクラスである場合、型名に「s」を追加するだけの規則が好きです。 JDKの例には、CollectionsおよびExecutorsが含まれます。また、Googleコレクションで使用される規則でもあります。

classを処理している場合、制御できるのは、一般的にユーティリティメソッドがクラス自体に属していることです。

20
ColinD

「utils」はパッケージ名であるべきだと思います。クラス名は、内部のロジックの目的を指定する必要があります。 sufix -util(s)の追加は冗長です。

8
Aito

「ヘルパー」と「ユーティリティ」という言葉は同じ意味で使用されていると確信しています。とにかくあなたが提供した例で判断すると、クラス名が略語であるか(または「DomUtil」のような略語がある場合)、パッケージを「whatever.WhateverUtil」(またはパッケージに複数のユーティリティがある場合はUtils)と呼びます)。それ以外の場合は、略語ではなくフルネームを使用し、「whatever.WhateverUtilities」と呼びます。

それは本当にあなた次第ですが、コーダーがあなたが話していることを知っている限り、あなたは行ってもいいです。あなたが誰かのために仕事としてこれを専門的にやっているなら、私のアドバイスを受ける前に彼らのコーディング標準が何であるかを尋ねてください。それがあなたの仕事を続けるのに何が助けになるとしても、常にショップの基準に従ってください。 :-)

3
KSwift87