2012-01-08 9 views
8

Estoy siguiendo el spring tutorial.¿Mala práctica en este tutorial de primavera?

En la sección de una interfaz se crea ProductManager "3.2 Añadir algunas clases de lógica de negocio.":

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(); 

} 

A continuación, se crea una clase SimpleProductManager aplicación:

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();   
    } 

} 

La clase de implementación añade un extra método setProducts(). En caso de que la interfaz ProductManager no tenga también un método setProducts para permitir clases que usan setProducts para instanciar SimpleProductManager polimórficamente. Actualmente esto no es posible -

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

Respuesta

7

La interfaz no incluye setProducts porque no se supone que los clientes de esa interfaz (probablemente un controlador MVC) para llamarlo. La interfaz define solo aquellas operaciones que se supone que los clientes deben usar, en lugar de definir todos los métodos que la implementación puede tener.

El método setProducts será accesible para la configuración de beans (por ejemplo, usando <property name="products">), lo que permite que los productos estén configurados estáticamente en el inicio. Después de eso, el código del cliente se refiere al bean a través de su interfaz restringida.

Su ejemplo p.setProducts() nunca se debe invocar en este ejemplo, ya que los productos solo se configuran en la configuración de beans, no por lógica de negocios.

Cuestiones relacionadas