2012-01-08 8 views
8

私はspring tutorialに従っています。セクションでこの春のチュートリアルでは悪い練習ですか?

「3.2ビジネスロジックのためのいくつかのクラスを追加します。」ProductManagerが作成されたインタフェースを:

package springapp.service; 

import java.io.Serializable; 
import java.util.List; 

import springapp.domain.Product; 

public interface ProductManager extends Serializable{ 

    public void increasePrice(int percentage); 

    public List<Product> getProducts(); 

} 

その後SimpleProductManager実装クラスが作成されます。

package springapp.service; 

import java.util.List; 

import springapp.domain.Product; 

public class SimpleProductManager implements ProductManager { 

    public List<Product> getProducts() { 
     throw new UnsupportedOperationException(); 
    } 

    public void increasePrice(int percentage) { 
     throw new UnsupportedOperationException();   
    } 

    public void setProducts(List<Product> products) { 
     throw new UnsupportedOperationException();   
    } 

} 

実装クラスは余分を追加方法setProducts()。インターフェイスProductManagersetProductsを使用するクラスが多態的にSimpleProductManagerをインスタンス化するようなクラスを許可する方法もありません。現在、これは不可能である -

ProductManager p = new SimpleProductManager(); 
p.setProducts(); 

答えて

7

そのインターフェイス(おそらくMVCコントローラ)のクライアントがそれを呼び出すことになっていませんので、インターフェースはsetProductsが含まれていません。インタフェースは、実装が持つ可能性があるすべてのメソッドを定義するのではなく、クライアントが使用すると考えられる操作のみを定義します。

setProductsメソッドは、起動時に製品を静的に構成できるように、beans構成(たとえば、<property name="products">を使用)からアクセスできます。その後、クライアントコードは、その制限されたインタフェースを介してBeanを参照します。

p.setProducts()この例では、ビジネスロジックではなく、Beanのコンフィグレーションでのみ設定されるため、この例ではこの例を呼び出さないでください。

関連する問題