Order

dongdong·2023년 1월 11일
0

공부프로젝트

목록 보기
7/9

사용될 Dto

화면에서 체크한 값을 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();
    });
});

OrderController

주문할때 고민해야할 부분이 쿠폰의 사용 여부에 따라 주문 가격이 달라져야 한다. 가격 계산은 합성관계로 해결하였다.

구조

DiscountPolicy 인터페이스를 만들고, 인터페이스는 calculatePrice() 메서드를 가진다 이 할인 정책을 구현할 객체는 BasicDiscountPolicy 추상클래스이다.

Basic 할인 정책을 추가할때마다 추상 메서드인 calculateOrderPrice()를 적절히 구현해 주면된다.

Coupon

Coupon은 기본 할인 정책으로써 BasicDiscountPolicy를 상속 받고있다.
상속 받았으므로 추상 메서드를 적절히 구현한다.

Coupon에서 calculateOrderPrice()를 구현함으로써 쿠폰을 사용하는 주문일 경우의 주문 금액을 계산하는 역할은 Coupon이 하게되며 OrderCoupon 과의 협력으로 할인이 적용된 가격을 계산 할 수 있다.

만약 Coupon의 내부 코드가 바뀌어도 Order의 주문 금액을 계산하는 코드는 전혀 변경할 필요가 없어 진다.

쿠폰을 사용하지않을 경우도 같은 구조를 유지하기 위해 NoneDiscountPolicy 클래스를 만들고 calculateOrderPrice()를 구현 해주었다.(가격과 수량을 곱한 전체 금액을 반환한다.)

쿠폰 - X

상품 금액과 수량을 계산되어 올바른 110,000이 나온다.

profile
공부하고 기록하기~

0개의 댓글