옅은 ViewObject 디자인

3371 단어 jspUI전자 상거래
페이지의 복잡성을 줄이는 방법, 페이지의 코드 양을 줄이는 방법, JSP를 줄이는 방법 페이지의 짜증나는 라벨.방법 중 하나는 ViewObject를 잘 사용하는 것이다.
내가 접촉한 시스템에서, 나는 일찍이 전능한 ViewObject를 본 적이 있다.데이터의 지속성은 그를 필요로 하고, 업무 논리는 그를 필요로 하며, 페이지 전시는 그를 필요로 한다.이로 인해 다음과 같은 상황이 발생합니다.
1. 보기층 코드가 복잡하고 지구화층의 논리도 있고 업무 논리층의 논리도 있고 전시층의 논리도 있다.
2. 업무가 서비스 층에서 시청층으로 번진다.ViewObject 수정은 데이터베이스에 직접적인 영향을 미칩니다.
3. 코드의 유지보수량이 너무 많아서 재구성할 수 없습니다.일단 수요가 있으면 코드만 늘리고 기존 코드는 개선하지 못한다.
4. 코드를 다시 사용할 수 없습니다.Widget이 다른 페이지에 여러 번 나타나면, 보기 층의 코드도 여러 번 복사해야 합니다.
이런 심각한 제약을 받는 체계의 발전그래서 웹 페이지에 사용할 수 있도록 ViewObject를 정성껏 설계해야 한다.
 
좋은 ViewObject 설계 방법
1. 공장 도입,
ViewObject는 UI의 각종 폼 요소를 수집하여 VIewObject는 고객이 어떤 지불 방식을 사용했는지, 얼마의 금액을 지불했는지 등을 파악하기 때문에 각종 업무 논리적 대상을 생성할 수 있다.이것은 마치 공장이 각종 원자재를 가지고 있어서 일정한 공예, 절차를 통해 각종 물건을 생산할 수 있는 것과 같다.ViewObject도 마찬가지입니다.
예를 들어 UI에는 인터넷 뱅킹 결제, 포인트 결제, 대금권 등 세 가지 결제 방식이 있는데 고객이 조합 결제를 할 수 있다.시스템은 지불 결과에 따라 상응하는 지불 기록을 생성할 것이다.그럼 결제 ViewObject는 어떻게 쓰죠?
코드는 다음과 같습니다.
public class PaymentViewObject {
    private boolean onlineBank;
    private double amount;
    private boolean point;
    private double points;
    private boolean voucher;
    private String voucherNo;

    public PayRecord createOnlineBanckRecord(){
        PayRecord record = new PayRecord();
        record.setType(Payment.Onlinebank);
        record.setAmount(amount);
        return record;
    }

    /**
     *        
     */
    public isValidPayment(){
        return onlineBank || point || voucher
    }
    public boolean hasEnoughPoints(int pointsHad){
        if (pointsHad == 0) return false;
        return points <pointsHad;
    }
    public PayRecord createPointRecord(){
        PayRecord record = new PayRecord();
        record.setType(Payment.Point);
        record.setPoints(points);
        return record;
    }
    public PayRecord createVoucherRecord(){
        PayRecord record = new PayRecord();
        record.setType(Payment.Vourcher);
        record.setVourcherNo(voucherNo);
        return record;
    }
    public List<PayRecord> createPayRecordes(){
        List<PayRecord> records = new ArrayList<PayRecord>();
        if(points){
            records.add(createPointRecord());
        }
        if(onlineBank){
            records.add(createOnlineBanckRecord());
        }
        if(voucher){
            records.add(createVoucherRecord());
        }
        return records;
    }
}
 
이렇게 하면 보기층의 코드 복잡도가 크게 낮아지고 유지보수성이 높아진다.
      
2. 페이지에서 비슷한 Widget을 분석하고 차이를 분석하며viewObject를 계산합니다.
전자상거래 백그라운드에서 가장 흔히 볼 수 있는 요소는 주문 항목이다.그러나 주문 예약 절차, 주문 수정 절차, 주문 확인 절차에서 주문 항목의 표현 형식은 약간의 차이가 있다. 예를 들어
주문 예약 프로세스(항목, 가격, 할당액)
주문 수정 프로세스(항목, 총 가격, 실제 할당량)
주문 확인 절차(항목, 확인 시간, 확인자)
분석을 통해 우리는 OrderItem VIewObject를 추출하고 OrderItem ViewObjectFactory를 생성하여 각종 VO를 생성한다
 
요약하면 다음과 같은 방법으로 ViewObject의 작성을 안내할 수 있습니다.1. 팩토리를 도입하고 다양한 VO를 자주 만든다.2. VO에 Factory Method를 추가하여 DomainObject를 만듭니다.3. 부분적인 논리를 VO에 써서 시각층의 코드 복잡도를 줄인다.

좋은 웹페이지 즐겨찾기