Плохая практика в этом весеннем уроке? - PullRequest
8 голосов
/ 08 января 2012

Я следую учебнику 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 голосов
/ 08 января 2012

Интерфейс не включает setProducts, поскольку клиенты этого интерфейса (вероятно, контроллер MVC) не должны вызывать его. Интерфейс определяет только те операции, которые должны использовать клиенты, а не все методы, которые может иметь реализация.

Метод setProducts будет доступен для конфигурации бинов (например, с использованием <property name="products">), что позволяет статически конфигурировать продукты при запуске. После этого клиентский код обращается к компоненту через его ограниченный интерфейс.

Ваш пример p.setProducts() никогда не должен вызываться в этом примере, поскольку продукты настраиваются только в конфигурации bean-компонентов, а не с помощью бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...