2012-01-08 28 views
8

Tôi đang theo dõi spring tutorial.Thực hành không tốt trong hướng dẫn mùa xuân này?

Trong phần một giao diện ProductManager được tạo ra "3.2 Thêm một số lớp cho logic kinh doanh.":

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

} 

Sau đó, một lớp SimpleProductManager thực hiện được tạo ra:

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

} 

Lớp thực hiện bổ sung thêm phương pháp setProducts(). Nếu giao diện ProductManager cũng không có phương thức setProducts để cho phép các lớp sử dụng setProducts để khởi tạo SimpleProductManager đa hình. Hiện tại đây là không thể -

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

Trả lời

7

Giao diện không bao gồm setProducts vì khách hàng của giao diện đó (có thể là một bộ điều khiển MVC) đều không được phép gọi nó. Giao diện chỉ định nghĩa các hoạt động mà các máy khách được cho là sử dụng, thay vì định nghĩa tất cả các phương thức mà việc thực thi có thể có.

Phương thức setProducts sẽ có thể truy cập được vào cấu hình hạt (ví dụ: sử dụng <property name="products">), cho phép các sản phẩm được định cấu hình tĩnh khi khởi động. Sau đó, mã máy khách đề cập đến bean thông qua giao diện bị hạn chế của nó.

Ví dụ p.setProducts() của bạn sẽ không bao giờ được gọi trong ví dụ này, vì các sản phẩm chỉ được định cấu hình trong cấu hình bean chứ không phải theo logic nghiệp vụ.

Các vấn đề liên quan