这个Spring教程存在不良实践吗?

8
我将翻译如下:

我正在跟随Spring教程

在“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()。那么接口ProductManager是否也应该有一个setProducts方法,以允许使用setProducts的类多态地实例化SimpleProductManager。目前这是不可能的 -
ProductManager p = new SimpleProductManager();
p.setProducts();
1个回答

7
该接口不包含setProducts方法,因为该接口的客户端(可能是MVC控制器)不应该调用它。该接口仅定义客户端应该使用的操作,而不是定义实现可能具有的所有方法。 setProducts方法将对beans配置可访问(例如使用<property name="products">),这允许在启动时静态配置产品。之后,客户端代码通过其受限接口引用bean。
在此示例中,您的p.setProducts()示例永远不应被调用,因为产品仅在beans配置中进行配置,而不是通过业务逻辑进行配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接