Day33 :) 상품관리 프로그램 설계

기능별 클래스/인터페이스 생성

DTO(Data Transfer Object)

  • 각 계층간 데이터 운반을 위한 객체
  • 로직을 갖지않는 데이터 객체
  • 생성자, 데이터 접근을 위한 getter/setter로 이루어짐

Product

public class Product{
	
    private int no;
    private String name;
    private int price;
    
    // 생성자
    public Product() {}
    
    // getter, setter메서드
    public int getNo(){
    	return no;
    }
    public void setNo(int no){
    	this.no = no;
    }
    
    public String getName(){
    	return name;
    }
    public void setName(String name){
    	this.name = name;
    }
    
    public int getPrice(){
    	return price;
    }
    public void setPrice(int price){
    	this.price = price;
    }
    
}

Controller

  • 사용자의 request를 직접 처리
  • 사용자가 원하는 기능을 입력받아 Service로 넘김

Store APP

/* 주요부분 외 나머지 생략 */

public class StoreApp{
	public satatic void main(String[]args){
	// 상품관리 기능 로직이 구현된 ProductService의 객체 구현
	private ProductService service = new ProductService();
    Scanner scan = new Scanner(system.in)
    
    while(true){
    	System.out.println("============================");
        System.out.println("1. 상품조회")
    	System.out.println("============================");
        System.out.print("번호 입력: ")
        int menuNo = scan.readInt();
        
        if(menuNo == 1){
        	System.out.println("1. 상품조회")
        	service.getAllProducts();
     	}
    }
}    

Service

  • Controller에서 요청한 기능에 적절한 DAO를 가져와 처리
  • DAO를 통해 DB에 접근하고 DTO를 통해 데이터를 전달함
public class ProductService{
	private ProductDao productDao = new ProductDao();
    
   	public getAllproducts(){
    	Product product = productDao.SelectAllProducts();
        return product;
    }
}

DAO(Data Access Object)

  • 데이터 베이스에 연결하여 CRUD작업 수행
  • 작업량을 효율적으로 분배하기 위해 DB와 연결하는 객체를 따로 만들어 관리

ProductDao

public class ProductDao{
	
    	public List<Product> SelectAllProducts() throws SQLException{
		List<Product> products = new ArrayList<>();
		
		String sql = "select product_no, product_price, product_discount_price, product_name "
				+ "from tb_sample_products "
				+ "order by product_no desc ";
		
		Connection connection = getConnection();
		PreparedStatement pstmt = connection.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		
		while(rs.next()) {
			
			Product product = new Product();
			product.setNo(rs.getInt("product_no"));
			product.setPrice(rs.getInt("product_price"));
			product.setDiscountPrice(rs.getInt("product_discount_price"));
			product.setName(rs.getString("product_name"));
			
			products.add(product);
		}
		
		rs.close();
		pstmt.close();
		connection.close();
		
		return products;
	}

}

참고

VO(Value Object)

  • 내용물이 값 자체를 의미하기 때문에 readonly
  • 값이 불변적

좋은 웹페이지 즐겨찾기