화면에서 체크한 값을 form에 추가해서 controller로 보내준다.
$(document).ready(function() {
$("#btn1").click(function(event) {
var form = document.getElementById('orderForm');
var chkbox = $("input[name=chk]:checked");
// 체크된 체크박스 값을 가져온다
chkbox.each(function(i) {
var input1 = document.createElement('input');
var input2 = document.createElement('input');
var input3 = document.createElement('input');
var input4 = document.createElement('input');
// checkbox.parent() : checkbox의 부모는 <td>이다.
// checkbox.parent().parent() : <td>의 부모이므로 <tr>이다.
var tr = chkbox.parent().parent().eq(i);
var td = tr.children();
// td.eq(0)은 체크박스 이므로 td.eq(1)의 값부터 가져온다.
var id = td.eq(1).text();
var name = td.eq(2).text();
var price = stringToPrice(td.eq(3).text());
var count = td.eq(4).text();
input1.setAttribute("type", "hidden");
input1.setAttribute("name", "itemDtos[" + i + "].id");
input1.setAttribute("value", id);
input2.setAttribute("type", "hidden");
input2.setAttribute("name", "itemDtos[" + i + "].name");
input2.setAttribute("value", name);
input3.setAttribute("type", "hidden");
input3.setAttribute("name", "itemDtos[" + i + "].price");
input3.setAttribute("value", price);
input4.setAttribute("type", "hidden");
input4.setAttribute("name", "itemDtos[" + i + "].count");
input4.setAttribute("value", count);
form.appendChild(input1);
form.appendChild(input2);
form.appendChild(input3);
form.appendChild(input4);
});
form.submit();
});
});
주문할때 고민해야할 부분이 쿠폰의 사용 여부에 따라 주문 가격이 달라져야 한다. 가격 계산은 합성관계로 해결하였다.
DiscountPolicy
인터페이스를 만들고, 인터페이스는 calculatePrice() 메서드를 가진다 이 할인 정책을 구현할 객체는 BasicDiscountPolicy
추상클래스이다.
Basic 할인 정책을 추가할때마다 추상 메서드인 calculateOrderPrice()를 적절히 구현해 주면된다.
Coupon은 기본 할인 정책으로써 BasicDiscountPolicy를 상속 받고있다.
상속 받았으므로 추상 메서드를 적절히 구현한다.
Coupon
에서 calculateOrderPrice()를 구현함으로써 쿠폰을 사용하는 주문일 경우의 주문 금액을 계산하는 역할은 Coupon
이 하게되며 Order
는 Coupon
과의 협력으로 할인이 적용된 가격을 계산 할 수 있다.
만약 Coupon
의 내부 코드가 바뀌어도 Order
의 주문 금액을 계산하는 코드는 전혀 변경할 필요가 없어 진다.
쿠폰을 사용하지않을 경우도 같은 구조를 유지하기 위해 NoneDiscountPolicy
클래스를 만들고 calculateOrderPrice()를 구현 해주었다.(가격과 수량을 곱한 전체 금액을 반환한다.)
상품 금액과 수량을 계산되어 올바른 110,000이 나온다.