DTO를 만들었다면 DAO를 만들 차례이다. DAO는 실제로 DB의 data에 접근하기 위한 객체이다. 순수한 데이터를 보관하는 DTO와는 달리 DAO는 DB에 접근하여 데이터를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행한다.
DAO는 주로 인터페이스로 만들기 때문에 DB와 직접 연계되는 테이블의 엔티티의 노출을 최소화할 수 있고 구현클래스를 따로 두어 클래스 간의 관계를 유연하게 만들어줄 수 있다.
DAO는 인터페이스이기 때문에 메서드를 선언만 할 수 있는데, 해당 메서드가 구현체에서 어떤 기능을 하게 될지 DAO 작성 시점에 문서화 주석으로 자세히 기술해두는 것이 좋다. 지금은 혼자 개발을 하기 때문에 별다른 문제가 없을 수 있지만 함께 팀으로 개발을 하게 되는 경우 이러한 주석이 다른 사람이 만든 인터페이스가 어떤 기능을 하는지 보다 쉽게 알 수 있게 해준다.
내가 구성한 Dao는 총 4가지로 제품, 주문, 관리자, 사용자를 기준으로 분류하였다.
IMenuDao : 제품에 관련된 기능들을 모아둔 인터페이스
package coffee.pj.dao;
import java.util.List;
import coffee.pj.dto.Menu_DTO;
public interface IMenuDao {
/**
* (관리자 전용) 모든 메뉴를 조회하는 getAllMenu();
* @return 모든 메뉴 조회 java.util.List<Menu_DTO>
*/
public List<Menu_DTO> getAllMenu();
/**
* (사용자 전용) 모든 메뉴를 조회하는 getUserMenu();
* @param meu_num 메뉴 번호 int
* @return 모든 메뉴 조회 java.util.List<Menu_DTO>
*/
public List<Menu_DTO> getUserMenu(int menu_type);
/**
* 메뉴 번호를 통한 메뉴 상세 정보 조회 getOneMenu
* @param meu_num 메뉴 번호 int
* @return 메뉴 상세 정보 NAME, MENU_PRICE, MENU_DETAIL
*/
public Menu_DTO getOneMenu(int meu_num);
/**
* 메뉴 추가, 재고 등록 (트랜잭션) setMenu
* @param 메뉴 정보 MENU_TYPE, MENU_NAME, MENU_PRICE, MENU_DETAIL
* @return 성공여부 실패 0, 성공 1
*/
public int setMenu(Menu_DTO dto);
/**
* 메뉴 정보 변경
* @param menu_type 변경할 메뉴 타입(음료1, 디저트2)
* @param menu_name 변경할 메뉴 이름
* @param menu_price 변경할 메뉴 가격
* @param menu_detail 변경할 메뉴 상세설명
* @param menu_num 변경할 메뉴 번호
* @return 성공여부 실패 0, 성공 1
*/
public int modifyMenu(int menu_type, String menu_name, int menu_price, String menu_detail, int menu_num);
/**
* 메뉴 정보 row를 삭제
* @param 삭제할 메뉴의 번호
* @return 성공 여부 실패 0, 성공 1
*/
public int delMenu(int menu_no);
}
IAdminMemDao : 관리자 모드로 사용할 때의 기능을 모아둔 인터페이스
package coffee.pj.dao;
import java.util.List;
import coffee.pj.dto.Member_DTO;
public interface IAdminMemDao {
/**
* (관리자 전용)사용자 전체 조회 getAllMem();
* @return 사용자 전체 조회 java.util.List<Member_DTO>
*/
public List<Member_DTO> getAllMem();
/**
* (관리자 전용) 주문 일자를 통해 하루 매출 정보 조회 getOneSales
* @param order_date 주문일자 String
* @return 해당 주문 일자에 결제된 모든 제품 판매금액 합산
*/
public int getOneSales(String order_date);
/**
* (관리자 전용) 멤버 추가 setMem (관리자, 손님)
* (DB:mem_cart 트리거 처리)
* @param mem_type 등록할 멤버 타입 (관리자1, 손님2)
* @param mem_name 등록할 멤버 이름 (중복가능)
* @param mem_phone 등록할 휴대폰 번호 (중복불가)
* @return 성공여부 실패0, 성공1
*/
public int setMem(int mem_type, String mem_name, String mem_phone);
/**
* (관리자 전용) 멤버 삭제 delAdMem
* @param mem_name 삭제할 멤버 이름
* @param mem_phone 삭제할 휴대폰 번호
* @return 성공여부 실패0, 성공1
*/
public int delMem(String mem_name, String mem_phone);
}
IUserMemDao : 고객 모드로 사용할 때의 기능을 모아둔 인터페이스
package coffee.pj.dao;
public interface IUserMemDao {
/**
* (사용자 전용) 회원 가입, 중복 유효성 검사 트랜잭션 실행 getJoinMem
* @param mem_name 등록할 회원 이름 (중복가능)
* @param mem_phone 등록할 회원 번호 (중복불가)
* @return 성공여부 실패0, 성공1
*/
public int getJoinMem(String mem_name, String mem_phone);
/**
* (관리자, 사용자 전용) 로그인 (이름, 번호 둘다 만족해야 로그인)
* @param mem_name 로그인할 회원 이름
* @param mem_phone 로그인할 회원 번호
* @return 성공여부 실패0, 성공1
*/
public int loginMem(String mem_name, String mem_phone);
/**
* (사용자 전용) 게스트 로그인. 로그인 없이 주문하는 사용자 전용 (자동 생성, 입력값 없음)
* @return 성공여부 실패0, 성공1
*/
public int loginGuest();
}
IOrderMenuDao : 주문과 관련된 기능을 모아둔 인터페이스
package coffee.pj.dao;
import java.util.List;
import coffee.pj.dto.MemCart_DTO;
import coffee.pj.dto.Optional_DTO;
public interface IOrderMenuDao {
/**
* 메뉴 번호를 선택해 주문서에 주문을 업데이트하는 메서드 setOrder
* 재고 자동 차감 트리거
* 로그인한 회원은 장바구니 자동업데이트 트랜잭션
* @param menu_num 메뉴 번호
* @return 성공여부 실패0, 성공1
*/
public int setOrder(int menu_num, int mem_cart);
/**
* 회원 휴대폰 번호를 통해 회원 장바구니 조회하는 메서드 getMemCart
* @param mem_phone 회원 휴대폰 번호 (중복없음)
* @return 회원 장바구니 상세 정보 ORDER_NUM, MENU_NAME, ORDER_COST, ORDER_DATE
*/
public MemCart_DTO getMemCart(String mem_phone);
/**
* 옵션 추가 (제품타입1:음료를 선택했을 때만 사용되는 메서드) setOption
* @param opt_num 옵션 번호
* @return 성공여부 실패0, 성공1
*/
public int setOption(int menu_num, int opt_num);
/**
* 옵션 추가가 존재할 시 주문서에 옵션 추가 업데이트 setOptoOrder
* @param order_num 주문 번호
* @return 성공여부 실패0, 성공1
*/
public int setOptoOrder(String order_num);
/**
* 모든 옵션 조회
* @return 모든 메뉴 조회 java.util.List<Optional_DTO>
*/
public List<Optional_DTO> getAllOpt();
}
'PROJECT > 커피숍' 카테고리의 다른 글
[토이/자바/JDBC] 커피숍 키오스크 만들기(11) : JUnit Test (단위테스트) (0) | 2024.05.08 |
---|---|
[토이/자바/JDBC] 커피숍 키오스크 만들기(10) : Controller (0) | 2024.05.08 |
[토이/자바/JDBC] 커피숍 키오스크 만들기(7) : DTO (0) | 2024.05.08 |
[토이/자바/JDBC] 커피숍 키오스크 만들기(6) : DB 모듈 구현 (0) | 2024.05.08 |
[토이/자바/JDBC] 커피숍 키오스크 만들기(5) : ERD, 기능 정의 문서 (0) | 2024.05.04 |