Java インターフェース/実装の命名規則 [重複] 質問する

Java インターフェース/実装の命名規則 [重複] 質問する

FileHandler作成するさまざまなクラスやインターフェースにはどのように名前を付けますか? インターフェースやクラスなど、実装名に追加する実装情報がない場合がありますSqlFileHandler

このような場合、私は通常、 のように「通常の」名前でインターフェースに名前を付け、Truck実際のクラスに名前を付けますTruckClass

この点に関して、インターフェースとクラスにはどのように名前を付けますか?

ベストアンサー1

Interfaceそれが何であるかを名前で呼んでください。それが ではないからでTruckはなく、それが であるからです。ITruckITruckTruck

JavaInterfaceの はタイプ. 次にDumpTruck、、、、などTransferTruckが存在します。WreckerTruckCementTruckimplements Truck

Interfaceサブクラスの代わりにを使用する場合は、にキャストするだけですTruck。 のようにList<Truck>。 をI前に置くのは、ハンガリースタイルのシステム表記トートロジーコードに入力する内容が増えるだけです。

最近のJava IDEはインターフェースや実装などをこの馬鹿げた表記法なしでマークしますTruckClassトートロジートートロジーと同じくらい悪いですIInterface

実装であれば、それはクラスです。このルールの唯一の本当の例外は、そして常に例外はありますが、 のようなものになりますAbstractTruck。サブクラスだけがこれを認識し、クラスにキャストしてはならないため、クラスが抽象クラスであり、どのように使用すべきかについての情報が追加されます。 が定義内にあるため、Abstractよりも良い名前を考え出すこともできますし、代わりに またはAbstractTruckを使用することBaseTruckもできます。しかし、クラスは公開インターフェースの一部であってはならないため、これはルールの許容可能な例外であると私は信じています。コンストラクターを作成することは、この溝を越えるのに大いに役立ちます。DefaultTruckabstractAbstractprotected

そして、接尾辞は単なるノイズです。トートロジーが増えます。インターフェースではないものはすべて実装であり、部分的な実装である抽象クラスでさえも実装です。すべての名前にImplこのばかげた接尾辞を付けますか?Implクラス?

Interfaceは、パブリックメソッドとプロパティがサポートしなければならない内容に関する契約であり、タイプTruck情報も同様です。実装するものはすべてタイプTruck

Java標準ライブラリ自体を見てください。、、が見えますかIListArrayListImplいいえLinkedListImpl、、、が見えていますListArrayListここLinkedListに良い例があります。記事この質問について。これらのばかげた接頭辞/接尾辞の命名規則はすべて、ドライ原則も同様です。

また、、、その他のくだらない繰り返し接尾辞をオブジェクトに追加していることに気付いた場合はDTO、それらはおそらくJDOBEANパッケージそれらすべてのサフィックスの代わりに、適切にパッケージ化された名前空間は自己文書化されており、ほとんどの場所では内部的に一貫した方法で遵守されていない、非常に考えが不十分な独自の命名スキーム内のすべての無駄な冗長情報を削減します。

Class名前をユニークにするために を末尾に付けるしか思いつかない場合はImpl、 を使用すること自体を再考する必要がありますInterface。 があり、とは一意に区別されないInterface1 つの がある場合、ほとんどの場合 はおそらく必要ありません。ImplementationInterfaceInterface

ただし、一般的に保守性、テスト性、モック化のためには、インターフェースを提供するのがベストプラクティスです。詳細についてはこの回答をご覧ください

このトピックに関するマーティン・ファウラーの興味深い記事も参照してください。インターフェース実装ペア

おすすめ記事