EA의 DA08 배포

本篇主要讲企业级应用(Enterprise Applications, EAs)中与分布式有关的问题。



EA는 분산 시스템입니까?



대답은 예입니다. EA에는 일반적으로 동시 데이터 액세스 및 다른 EA와의 통합이 있기 때문입니다.

분산 EA의 통신


  • 원격 호출
  • 요청-응답 프로토콜
  • HTTP

  • RMI(지금은 사용되지 않음, 现在很少使用了)
  • 자바 RMI
  • 원격 EJB(Enterprise JavaBean)

  • RPC
  • 웹 서비스
  • 코르바

  • 간접 회화(별로 중요하지 않음, 不太重要)
  • 발행-구독 시스템, 메시지 큐, 튜플 공간, 분산 공유 메모리

  • 로컬 인터페이스 및 원격 인터페이스



    로컬 인터페이스는 같은 프로세스의 다른 개체에서만 액세스하는 로컬 개체에 있습니다.

    원격 인터페이스는 배포 경계의 개체에 있으며 원격으로 호출됩니다.
  • 로컬 인터페이스는 높은 응집력을 지원하기 위해 세분화됩니다.
  • 원격 인터페이스는 원격 호출 수를 최소화하기 위해 거칠게 세분화됩니다.

  • 패턴: 데이터 전송 개체 数据传输对象



    DTO는 여러 개체의 여러 속성을 네트워크를 통해 보낼 수 있는 단일 개체로 조합합니다.
  • 동작 없음
  • 논리 없음
  • 원격 메서드 호출의 양쪽 끝에서 이해해야 함

  • 직렬화 가능



    DTO는 네트워크를 통해 전송되도록 설계되었으므로 직렬화 가능해야 합니다.

    다양한 직렬화 유형:
  • JSON(요즘 가장 많이 사용됨)
  • XML
  • Java 객체 직렬화

  • 예시:

    class Address {
        private int number;
        private String street;
        private int postcode;
    }
    
    class Customer {
        private String name;
        private Address address;
    }
    
    class CustomerDTO {
        private String name;
        private int number;
        private String street;
        private int postcode;
    
        /* e.g. JSON String */
        public static String serialize(CustomerDTO cdto) {...}
        public static CustomerDTO deserialize(String customerStr) {...}
    }
    
    // DTO should not known the details of domain objects
    class CustomerAssembler {
        public static CustomerDTO createCustomerDTO(Customer c) {...}
        public static Customer createCustomer(CustomerDTO cdto) {...}
    }
    


    DTO의 장단점



    장점


  • 단순성
  • Remote Facade와의 호환성

  • 단점


  • 낮은 응집력: DTO는 느슨하게 관련된 데이터를 함께 묶기 때문에 높은 응집력의 설계 원칙을 위반하는 경향이 있습니다
  • .

    패턴: 원격 외관



    세세한 개체의 웹을 통해 세세한 인터페이스를 제공합니다. 두 세계의 장점입니다.
  • 도메인 논리 없음
  • 거친 메서드 호출을 세분화된 메서드 호출로 변환하고 결과를 대조하기 위해서만 존재함

  • PPT에 대한 자세한 내용은 다음과 같습니다.

    예시:

    public class CustomerFacade {
        public CustomerDTO getCustomer(int id) {
            Customer customer = CustomerMapper.find(id);
            CustomerDTO dto = CustomerAssembler.createCustomerDTO(customer);
            return dto;
        }
    
        public void updateCustomer(CustomerDTO customerDTO) {
            CustomerAssembler.updateCustomer(customerDTO);
        }
    
        public String getCustomerJSON(int id) {
            Customer customer = CustomerMapper.find(id);
            CustomerDTO dto = CustomerAssembler.createCustomerDTO(customer);
            return CustomerDTO.serialize(dto);
        }
    
        public void updateCustomerJSON(String json) {
            CustomerDTO customerDTO = CustomerDTO.deserialize(json);
            CustomerAssembler.updateCustomer(customerDTO);
        }
    }
    


    원격 외관의 장단점



    장점


  • 경량
  • 도메인 모델과의 호환성. 트랜잭션 스크립트 또는 테이블 모듈은 어쨌든 대략적인 액세스를 암시하는 경향이 있기 때문에 그다지 많지 않습니다.

  • 단점


  • 세분성을 결정하는 것이 간단하지 않을 수 있습니다.
    유스 케이스당 파사드? 전체 애플리케이션을 위한 하나의 원격 외관?
  • 좋은 웹페이지 즐겨찾기