Step-by-Step
[Spring] 4. Service 작성 본문
Service
- Controller가 받은 요청에 대해 알맞는 정보를 가공해서 다시 Controller에게 데이터를 넘겨주는 역할
- Controller에서 요청을 받아 Data를 Mapper에게 넘겨주고 Mapper에 의해 DB에서 받아온 정보를 Controller에게 전달해준다
사용할 Service
- User와 Bill을 구분하여 작성
Service Interface 이유
찾아보니 다들 Service 부분은 Interface와 implements한 class로 나눠 작성했는데 그 이유는 다음과 같다
- 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 중 OCP 원칙을 실현하기 위함
- Interface를 토대로 Service 구조의 뼈대를 만들고, Implements를 통해 Service의 기능을 구현한다
- 일단 Interface를 통해 구현했지만, 사실 인터페이스와 구현체 클래스가 1:1로 설계되어 있어서 굳이 필요하진 않은것 같다
- 아직 프로젝트를 완성한게 아니므로 일단 Interface를 통해 작성하였다
※ 객체지향 프로그래밍 및 설계의 다섯가지 기본 원칙 : SOLID (SRP, OCP, LSP, ISP, DIP)
※ OCP (Open/Closed Principle) : 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
++ 여러번의 수정을 거듭하면서 느끼는 점++
- 여러 기능을 추가하면서 Service 내의 메소드 양이 늘어나니까,, 찾기가 점점 힘들어졌다
- Interface를 통해 바꿀 구조를 먼저 파악한 후 기본 뼈대를 변경하고, 상속된 class에서 찾아 구현하면 더 쉽게 변경할 수 있음!
- 다른 이유도 많이 있을것 같지만, 지금 당장 느끼는 점은 인터페이스를 생성하면 유지보수가 용이하다는 점!
1. UserService Interface
package com.energysolution.service;
import java.util.HashMap;
import java.util.List;
import com.energysolution.dto.UserDTO;
public interface UserServiceInterface {
//회원 가입
public String insertUser(UserDTO userDTO);
//회원 로그인
public String LoginUser(String UserId, String Password);
//회원 ID 찾기
public List<String> FindUserId(String Email);
//회원 PW 찾기
public String FindUserPW(HashMap<String, String> findUserPWMap);
//회원 수정 (비밀번호)
public String updateUser(HashMap<String, String> updateMap);
//회원 삭제
public String deleteUser(String UserId, String Password);
//회원 유무 체크
public String checkUser(String UserId);
//비밀번호 가져오기
public String getUserPassword(String UserId);
}
2. UserService
package com.energysolution.service;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.energysolution.dto.UserDTO;
import com.energysolution.mapper.UserMapper;
@Service
public class UserService implements UserServiceInterface {
@Autowired
private UserMapper userMapper;
@Override
public String insertUser(UserDTO userDTO) {
//이미 있는 사용자인 경우
if(checkUser(userDTO.getUserId()).equals("success"))
return "false";
//insert 작업
userMapper.insertUser(userDTO);
return checkUser(userDTO.getUserId());
}
@Override
public String getUserPassword(String UserId) {
return userMapper.getUserPassword(UserId);
}
}
3. BillService Interface
package com.energysolution.service;
import java.util.HashMap;
import java.util.List;
import com.energysolution.dto.BillDTO;
import com.energysolution.dto.DetailBillDTO;
import com.energysolution.dto.PaymentDTO;
import com.energysolution.dto.TotalBillDTO;
public interface BillServiceInterface {
//고지서 등록
public String insertBill(BillDTO billDTO, DetailBillDTO detailbillDTO,PaymentDTO paymentDTO);
// 특정 기간 고지서 조회 (UserId와 Term)
public List<TotalBillDTO> getBillTerm(String UserId, int term);
// 특정 날짜 고지서 조회 (UserId와 Term)
public TotalBillDTO getBill(String UserId, String date);
// 고지서 부분 수정
public String updateBillField(String UserId, String Date, String Field, int fee);
// 고지서 전체 수정
public String updateBill(String UserId,BillDTO billDTO, DetailBillDTO detailbillDTO);
// 고지서 삭제
public String deleteBill(String UserId, String Date);
// 고지서 유무 확인
public String checkBill(int billId);
// 고지서 특정 필드 값 변경 확인
public String checkUpdateBillField(HashMap<String, String> updateCheckBillMap);
// 고지서 전체 필드 값 변경 확인
public String checkUpdateBill(String UserId, String date , HashMap<String, String> updateBillMap);
// 고지서 삭제 확인
public String checkDeleteBill(int billId);
// 고지서 ID 가져오기
public int getBillId(String UserId, String date);
}
4. BillService
package com.energysolution.service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.energysolution.dto.BillDTO;
import com.energysolution.dto.DetailBillDTO;
import com.energysolution.dto.PaymentDTO;
import com.energysolution.dto.TotalBillDTO;
import com.energysolution.mapper.BillMapper;
@Service
public class BillService implements BillServiceInterface{
@Autowired
private BillMapper billMapper;
private int billId;
//고지서 등록
@Override
public String insertBill(BillDTO billDTO, DetailBillDTO detailbillDTO, PaymentDTO paymentDTO) {
billId = getLastBillId()+1;
billDTO.setBillId(billId);
detailbillDTO.setBillId(billId);
paymentDTO.setBillId(billId);
billMapper.insertBill(billDTO);
billMapper.insertDetailBill(detailbillDTO);
billMapper.insertPayment(paymentDTO);
return checkBill(billId);
}
//마지막 BillId 가져옴
public int getLastBillId() {
return billMapper.getLastBillId();
}
//특정 날짜 고지서 출력
@Override
public TotalBillDTO getBill(String UserId, String date) {
//BillId 가져옴
int BillId = getBillId(UserId, date);
//각각 Bill, DetailBill에서 데이터 조회
BillDTO billDTO = billMapper.getBill(BillId);
DetailBillDTO detailbillDTO = billMapper.getDetailBill(BillId);
TotalBillDTO totalBillDTO = makeDTO(billDTO, detailbillDTO);
return totalBillDTO;
}
// 고지서 ID 가져오기
@Override
public int getBillId(String UserId, String date) {
HashMap<String, String> getBillIdMap = new HashMap<String, String>();
getBillIdMap.put("UserId", UserId);
getBillIdMap.put("date", date);
int BillId = billMapper.getBillId(getBillIdMap);
return BillId;
}
}
[참조]
https://ko.wikipedia.org/wiki/%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%84_%EC%9B%90%EC%B9%99
https://wildeveloperetrain.tistory.com/49
'프로젝트 > Eggo (Mobile App)' 카테고리의 다른 글
[Spring] 6. 응답표준 (1) (0) | 2022.04.29 |
---|---|
[Spring] 5. Mapper.java와 Mapper.xml 작성 (0) | 2022.04.26 |
[Spring] 3. DTO 작성 (0) | 2022.03.30 |
[Spring] 2. Controller 작성 (0) | 2022.03.30 |
[Spring] 1. Gradle 프로젝트 생성 (0) | 2022.03.28 |