학생부 프로그램을 MVC 패턴으로 변경한다.
: 관련하여 강사님 풀이!
메뉴 5. 평균 출력
// Controller
else if(action==5) {
ArrayList<StudentDTO> datas=model.selectAll();
// 데이터 정제, 가공
int sum=0;
for(StudentDTO data:datas) {
sum+=data.getScore();
}
double avg=sum*1.0/datas.size();
/*
StudentDTO data=model.selectOne();
double avg=data.getAvg();
*/
view.print14(avg);
}
// Model (selectAll인 경우)
public ArrayList<StudentDTO> selectAll() {
System.out.println(" service.model.StudentDAO selectAll()");
return this.datas;
}
// Model (selectOne인 경우)
public StudentDTO selectOne() {
System.out.println(" service.model.StudentDAO selectOne() 시작 : 평균");
int sum=0;
for(StudentDTO data:datas) {
sum+=data.getScore();
}
double avg=sum*1.0/datas.size();
StudentDTO dto=new StudentDTO();
dto.setAvg(avg);
System.out.println(" service.model.StudentDAO selectOne() 종료 : 평균");
return dto;
}
우리가 원하는 자료는 학생들의 평균 점수인데,
평균값이라는 결과가 1개 나오니까 selectOne이라고 할 수도 있고,
평균을 알기 위해서는 모든 학생의 데이터를 알아야 하니까 selectAll이 될 수도 있다.
두 가지 다 맞는 이야기이며, 설계가 어떻게 들어가냐에 따라 달라진다!
*참고
slelctOne의 output은 무조건 DTO
DUD는 boolean
여기서 R(selectOne)의 코드에서 double을 StudentDTO 타입으로 바꿀 수 없기 때문에,
DTO에서 double 타입을 하나 만들고, getter / setter 만들어준다.
// view
public void print14(double avg) {
System.out.println("전체 평균은 "+avg+"점 입니다.");
}
view 메뉴에서 syso("전체 평균은 " + avg + "점입니다."); 필요함.
다만 프론트에서는 avg의 값을 모르기 때문에, double avg를 인자로 반영해 주어야 한다.
view에서 평균을 계산해서 controller 측으로 반환해 주어도 되지만,
학생이 많아질수록, 성적이 다양해질수록, V에 로직이 있으면 느려질 것으로 예상이 되기 때문에
평균 로직을 백단에 배치한다.
또한 기능의 경우 한쪽으로 몰아주는 것이 좋다.
'JAVA > java' 카테고리의 다른 글
[JAVA] 예외 처리 (0) | 2024.07.26 |
---|---|
[JAVA] 결합도와 응집도 (1) | 2024.07.25 |
[JAVA] 팀 과제_커뮤니티 사이트 (0) | 2024.07.19 |
[JAVA] MVC 패턴_1 (0) | 2024.07.17 |
[JAVA] 컬렉션 (배열리스트와 맵) (0) | 2024.07.17 |