[解決済み】Javaインターフェース/実装の命名規則【重複あり
質問
作成した異なるクラス/インターフェースの名前はどのように付けていますか?
実装名に追加するような実装情報がないこともありますし、例えばインターフェイス
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
? いいえ、あなたは見る
List
と
ArrayList
および
LinkedList
. 以下は、素敵な
記事
という質問についてです。これらの愚かな接頭辞/接尾辞の命名規則は、すべて
DRY
という原則もあります。
また、もしあなたが
DTO
,
JDO
,
BEAN
やその他の愚かな反復的な接尾辞をオブジェクトに付ける場合は、おそらく
パッケージ
このような接尾辞は必要ありません。適切にパッケージ化された名前空間は自己文書化され、ほとんどの場所で内部的にさえ一貫した方法で順守されていない、実にお粗末な独自の命名スキームの無駄な冗長情報をすべて削減することができます。
を作るために思いつくことがすべてであれば、そのようなことはありません。
Class
をつけることで、ユニークな名前になります。
Impl
を持つことを再検討する必要があります。
Interface
を全く使用しない。そのため
Interface
と、1つの
Implementation
から一意に特化されていない
Interface
は必要ないでしょう。
Interface
は、ほとんどの場合
しかし、一般的には、保守性、テスト性、モッキングの観点から、インターフェースを提供することがベストプラクティスです。参照 詳しくはこの回答 .
また、このトピックに関するMartin Fowlerの興味深い記事も参照してください。 インターフェース実装ペア
関連
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] HTTP ステータス 500 - サーブレットクラス pkg.coreServlet のインスタンス化に失敗しました。
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み】Javaでのインターフェース命名について【終了しました