재밌고 어려운 IT를 이해해보자~!

MVC Pattern Practice 1 본문

코리아IT핀테크과정

MVC Pattern Practice 1

언제나즐거운IT 2023. 12. 13. 14:24

DAO DTO를 활용해서 작성했던 학생부 프로그램의 Controller를 보면

package ctrl;

import java.util.ArrayList;

import model.StudentDTO;
import model.StudentDAO;
import view.StudentView;

public class StudentCtrl {
	private StudentView view;
	private StudentDAO model;

	public StudentCtrl() {
		this.view = new StudentView();
		this.model = new StudentDAO();
	}

	public void startApp() {
		int PK = 1003;
		while (true) {
			view.printMenu();
			int action = view.inputAction();
			if (action == 0) {
				break;
			} else if (action == 1) {
				String name = view.inputName();
				int score = view.inputScore();
				StudentDTO studentDTO = new StudentDTO(PK++, name, score);
				boolean flag = model.insert(studentDTO);
				if (flag) {
					view.printTrue();
				} else {
					view.printFalse();
				}
			} else if (action == 2) {
				StudentDTO studentDTO = new StudentDTO(0, null, 0);
				studentDTO.setSearchCondition("전체 목록 출력");
				ArrayList<StudentDTO> datas = model.selectAll(studentDTO);
				view.printDatas(datas);
			} else if (action == 3) {
				view.printSearchMenu();
				action = view.inputAction();
				if (action == 1) {
					int score = view.inputScore();
					StudentDTO studentDTO = new StudentDTO(0, null, score);
					studentDTO.setSearchCondition("점수검색");
					ArrayList<StudentDTO> datas = model.selectAll(studentDTO);
					view.printDatas(datas);
				}
				else if (action == 2) {
					int num = view.inputNum();
					StudentDTO studentDTO = new StudentDTO(num, null, 0);
					studentDTO.setSearchCondition("PK검색");
					StudentDTO data = model.selectOne(studentDTO);
					if (data == null) {
						view.printFalse();
						continue;
					}
					view.printData(data);
				}

				else if (action == 3) {
					String name = view.inputName();
					StudentDTO studentDTO = new StudentDTO(0, name, 0);
					studentDTO.setSearchCondition("이름검색");
					ArrayList<StudentDTO> datas = model.selectAll(studentDTO);
					view.printDatas(datas);
				}

			} else if (action == 4) {
				view.printUpdateMenu();
				action = view.inputAction();
				boolean flag;
				int num = view.inputNum();
				if (action == 1) {
					int score = view.inputScore();
					StudentDTO studentDTO = new StudentDTO(num, null, score);
					flag = model.update(studentDTO);
				} else {
					String name = view.inputName();
					StudentDTO studentDTO = new StudentDTO(num, name, 0);
					flag = model.update(studentDTO);
				}
				if (flag) {
					view.printTrue();
				} else {
					view.printFalse();
				}
			} else if (action == 5) {
				int num = view.inputNum();
				StudentDTO studentDTO = new StudentDTO(num, null, 0);
				boolean flag = model.delete(studentDTO);
				if (flag) {
					view.printTrue();
				} else {
					view.printFalse();
				}
			} else if (action == 6) {

			}
		}
	}
}

 

PK를 검색하는 구문을 보면 StudentDTO studentDTO = new StudentDTO(num, null, 0); 처럼되어있다.

studentDTO클래스는 pk, 이름, 점수 를 메게변수르 받는 생성자만 존재하고 있기 때문에 

객체를 생성할때 필요한값만 유효하게 넣고 불필요한값은 null과 0이 대입되어있다. 하지만 나중엔 null도 쓰이고 0도 score에선 사실 유효한값이다. 따라서 이런 불필요한 입력을 막기위해서 !!!

웹 개발에서는 기본 생성자를 사용하는 것을 원칙으로 한다!!!!!
new할때 생성자의 인자로 넣는 값중에서 어떤 값이 정말 유효한 값인지 파악하는 시간을 줄이기위한 것이다.

 

따라서 Ctrl파트는 다음처럼 보기 좋아지고

else if(action==1) {
				ProductDTO productDTO=new ProductDTO();
				ArrayList<ProductDTO> datas=productDAO.selectAll(productDTO);
				view.printDatas(datas);
			}

 

DAO 파트에서 insert 부분은 다소 번거로워진다!

public boolean insert(ProductDTO productDTO) {
		try {
			ProductDTO data=new ProductDTO();
			data.setNum(productDTO.getNum());
			data.setName(productDTO.getName());
			data.setPrice(productDTO.getPrice());
			data.setCnt(productDTO.getCnt());
			this.datas.add(data);
		}catch(Exception e) {
			System.out.println("[로그] 알수없는 이슈발생!");
			return false;
		}
		return true;

 

하나더 바뀌는점 !

 

DAO before 

package model;

import java.util.ArrayList;

public class ProductDAO {

	private ArrayList<ProductDTO> datas; // DB

	public ProductDAO() {
		datas=new ArrayList<ProductDTO>();

		// 샘플 데이터 추가
		ProductDTO sample01=new ProductDTO();
		sample01.setNum(1001);
		sample01.setName("콜라");
		sample01.setPrice(1200);
		sample01.setCnt(3);
		datas.add(sample01);
		ProductDTO sample02=new ProductDTO();
		sample02.setNum(1002);
		sample02.setName("사이다");
		sample02.setPrice(1100);
		sample02.setCnt(0);
		datas.add(sample02);
	}

	public ArrayList<ProductDTO> selectAll(ProductDTO productDTO){
		return datas;
	}
	public ProductDTO selectOne(ProductDTO productDTO){
		boolean flag=false;
		int i;
		for(i=0;i<this.datas.size();i++) {
			// this.datas.get(i).getNum()
			// 내꺼.DB.요소 == 상품
			// 상품.pk()
			if(this.datas.get(i).getNum() == productDTO.getNum()) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			return null;
		}
		return this.datas.get(i);
	}

	public boolean insert(ProductDTO productDTO) {
		try {
			ProductDTO data=new ProductDTO();
			data.setNum(productDTO.getNum());
			data.setName(productDTO.getName());
			data.setPrice(productDTO.getPrice());
			data.setCnt(productDTO.getCnt());
			this.datas.add(data);
		}catch(Exception e) {
			System.out.println("[로그] 알수없는 이슈발생!");
			return false;
		}
		return true;
	}
	public boolean update(ProductDTO productDTO) {
		boolean flag=false;
		int i;
		for(i=0;i<this.datas.size();i++) {
			if(this.datas.get(i).getNum() == productDTO.getNum()) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			return false;
		}
		
		if(productDTO.getSearchConditon().equals("구매")) {
			this.datas.get(i).setCnt(this.datas.get(i).getCnt()-1);
		}
		else if(productDTO.getSearchConditon().equals("재고변경")) {
			this.datas.get(i).setCnt(productDTO.getCnt());
		}
		
		return true;
	}
	public boolean delete(ProductDTO productDTO) {
		boolean flag=false;
		int i;
		for(i=0;i<this.datas.size();i++) {
			if(this.datas.get(i).getNum() == productDTO.getNum()) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			return false;
		}
		this.datas.remove(i);
		return true;
	}

}

 

DAO after

package model;

import java.util.ArrayList;

public class ProductDAO2 {

	private ArrayList<ProductDTO> datas; // DB

	public ProductDAO2() {
		datas = new ArrayList<ProductDTO>();

		// 샘플 데이터 추가
		ProductDTO sample01 = new ProductDTO();
		sample01.setNum(1001);
		sample01.setName("콜라");
		sample01.setPrice(1200);
		sample01.setCnt(3);
		datas.add(sample01);
		ProductDTO sample02 = new ProductDTO();
		sample02.setNum(1002);
		sample02.setName("사이다");
		sample02.setPrice(1100);
		sample02.setCnt(0);
		datas.add(sample02);
	}

	public ArrayList<ProductDTO> selectAll(ProductDTO productDTO) {
		return datas;
	}

	public ProductDTO selectOne(ProductDTO productDTO) {
		boolean flag = false;
		int i;
		for (i = 0; i < this.datas.size(); i++) {
			// this.datas.get(i).getNum()
			// 내꺼.DB.요소 == 상품
			// 상품.pk()
			if (this.datas.get(i).getNum() == productDTO.getNum()) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			return null;
		}
		return this.datas.get(i);
	}

	public boolean insert(ProductDTO productDTO) {
		try {
			ProductDTO data = new ProductDTO();
			data.setNum(productDTO.getNum());
			data.setName(productDTO.getName());
			data.setPrice(productDTO.getPrice());
			data.setCnt(productDTO.getCnt());
			this.datas.add(data);
		} catch (Exception e) {
			System.out.println("[로그] 알수없는 이슈발생!");
			return false;
		}
		return true;
	}

	public boolean update(ProductDTO productDTO) {
		if (productDTO.getSearchConditon().equals("구매")) {
			productDTO.setCnt(productDTO.getCnt() - 1);
		} else if (productDTO.getSearchConditon().equals("재고변경")) {
			productDTO.setCnt(productDTO.getCnt());
		}

		else {
			return false;
		}
		return true;
	}

	public boolean delete(ProductDTO productDTO) {
		try {
			int i;
			for (i = 0; i < this.datas.size(); i++) {
				if (this.datas.get(i).getNum() == productDTO.getNum()) {
					break;
				}
			}
			this.datas.remove(i);
		} catch (Exception e) {
			return false;
		}
		return true;
	}
	

}

앞으로 유저가 입력한것이 유효한지는 slectOne에서 한 후에 리턴받은 후 Controller에서 리턴값이 null인지 아닌지 판별해서 기능을 수행한다. 따라서 insert update 는 딱 자기의 기능만 수행할 수 있고, delete는 remove메서드를 사용해야하기 때문에 datas.get(i)값이 필요해 전체목록을 찾아봐야한다.

 

재고 변경이 아닌 재고 추가기능은 유저에게 추가하고싶은 재고수량을 입력받아, 원래 재고에 더해주면 될 것 같다.

setCnt(getCnt() + cnt) 

 

'코리아IT핀테크과정' 카테고리의 다른 글

MVC Pattern Practice 3  (0) 2023.12.17
MVC Pattern Practice 2  (0) 2023.12.14
DTO (Data Transfer Object) DAO (Data Access Object)  (0) 2023.12.12
MVC design pattern  (0) 2023.12.12
컬렉션 프레임워크 (Collection Framework)  (2) 2023.12.07
Comments