4

StackOverflowで標準的なクラス/インターフェイスの名前付けの質問を見たり、このテーマに関する他の多くの 意見を読んだりしましたが、これらの場所のいずれかで答えられるかどうかわからない関連する質問があります。IInterfaceまたはClassImplの命名規則は不要であり(最新のIDEの場合)、コードが読みにくくなるため、嫌いになる傾向があります。多くの場合、これらの命名スキーマの1つを使用する必要があるということは、設計が正しくないことを意味しているようです。

ただし、APIの一部として(通常は別のパッケージで)公開したいインターフェイスがあるシナリオに遭遇することがよくあります。次に、インターフェイスの抽象的な実装を作成して、最も期待するいくつかの一般的な機能を含めます。 (すべてではありませんが)派生する具体的な実装。例えば:

public interface Foo {
    public String getBar();
}

public abstract class BasicFoo implements Bar {
    private String bar;

    @Override
    public String getBar() {
        return bar;
    }
}

実際には、実装名の前にBasicを付ける傾向がありますが、基本的には、基本/デフォルトの実装を提供するためにImplサフィックスを使用している人がいます。メモリストレージ(Barなど)にバックアップされたFooであることを意味する名前を試すことができますが、これは常にBasicFooのすべての機能をキャプチャします。また、インターフェイスが追加の柔軟性と分離を提供するため、インターフェイスを破棄して実装を直接公開する必要があるとは確信していません。

このシナリオを処理するためのより良い方法、または論理的な命名規則についての考えはありますか?

4

1 に答える 1

3

Javaの世界で一般的なパターンは、抽象的で不完全な実装と呼ばれAbstractSomethingます。たとえばAbstractList、またはAbstractButton。インターフェイスと抽象クラスの両方がクライアントに公開されます。この背後にある考え方は、抽象クラスがAPIを使用する際の開始点として機能するということです。これは、java.util.Listなど、多くのメソッドや複雑なコントラクトを定義するインターフェイスで特に役立ちます。インターフェイスのメソッドのほとんどは、クライアントが提供する必要のある抽象的なメソッドの最小限のセットの観点から実装されています。

たとえば、に基づいてリストを実装するには、メソッドとメソッドAbstractListの実装を提供するだけで済みます。他のすべての操作(イテレータ、、、... )は、最終的にこれら2つに委任されます。get(index)size()indexOfsubListhashCode

于 2013-03-24T00:29:04.200 に答える