Step-by-Step

[Spring] 4. Service 작성 본문

프로젝트/Eggo (Mobile App)

[Spring] 4. Service 작성

희주(KHJ) 2022. 4. 15. 12:41

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
Comments