재밌고 어려운 IT를 이해해보자~!
MVC Pattern Practice 1 본문
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