1. ホーム

[解決済み】Javaインターフェース/実装の命名規則【重複あり

2022-03-25 12:52:21

質問

作成した異なるクラス/インターフェースの名前はどのように付けていますか? 実装名に追加するような実装情報がないこともありますし、例えばインターフェイス FileHandler とクラス SqlFileHandler .

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

この点、インターフェースやクラスの名前はどのようにつけるのでしょうか?

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

名前 Interface それが何であるか Truck . ない ITruck ではありませんので ITruck である。 Truck .

An Interface は、Javaでは タイプ . そして、あなたは DumpTruck , TransferTruck , WreckerTruck , CementTruck などは implements Truck .

を使用しているときは Interface にキャストするだけで、サブクラスの代わりになります。 Truck . のように List<Truck> . プッティング I を前に置くと、ちょうど ハンガリースタイル 表記法 トートロジー というのは、コードに入力するものを増やすだけだからです。

最近のJava IDEはすべて、インターフェースや実装などをこの愚かな表記なしでマークしています。それを TruckClass というのは トートロジー と同じように悪いのは IInterface のトートロジーです。

実装であれば、それはクラスです。このルールの唯一の本当の例外は、常に例外があるのですが、次のようなものでしょう。 AbstractTruck . これはサブクラスだけが見ることができ、決して Abstract クラスが抽象的であること、そしてそのクラスがどのように使用されるべきかという情報を追加しています。まだ AbstractTruck を使用し BaseTruck または DefaultTruck の代わりに abstract が定義にあります。しかし Abstract クラスは、パブリックなインターフェイスの一部であってはならないので、これは許容できる例外だと思います。コンストラクタを protected この溝を越えるには、長い道のりが必要です。

そして Impl もノイズに過ぎない。さらにトートロジー。インターフェイスでないものはすべて実装であり、部分的な実装である抽象クラスでさえも実装である。あなたはその愚かな Impl のすべての名前にサフィックスを付けています。 クラス ?

Interface は、パブリックメソッドとプロパティが何をサポートしなければならないかという契約であり、それはまた タイプ の情報も提供します。を実装しているものはすべて Truck タイプ Truck .

Java標準ライブラリそのものに目を向けてください。以下のものが見えますか? IList , ArrayListImpl , LinkedListImpl ? いいえ、あなたは見る ListArrayList および LinkedList . 以下は、素敵な 記事 という質問についてです。これらの愚かな接頭辞/接尾辞の命名規則は、すべて DRY という原則もあります。

また、もしあなたが DTO , JDO , BEAN やその他の愚かな反復的な接尾辞をオブジェクトに付ける場合は、おそらく パッケージ このような接尾辞は必要ありません。適切にパッケージ化された名前空間は自己文書化され、ほとんどの場所で内部的にさえ一貫した方法で順守されていない、実にお粗末な独自の命名スキームの無駄な冗長情報をすべて削減することができます。

を作るために思いつくことがすべてであれば、そのようなことはありません。 Class をつけることで、ユニークな名前になります。 Impl を持つことを再検討する必要があります。 Interface を全く使用しない。そのため Interface と、1つの Implementation から一意に特化されていない Interface は必要ないでしょう。 Interface は、ほとんどの場合

しかし、一般的には、保守性、テスト性、モッキングの観点から、インターフェースを提供することがベストプラクティスです。参照 詳しくはこの回答 .

また、このトピックに関するMartin Fowlerの興味深い記事も参照してください。 インターフェース実装ペア