문제

우리는 RMI와 JMS를 사용하여 Java 백엔드에 연결된 풍부한 클라이언트 (Flex로 작성)를 연구하고 있습니다. DDD 방식으로 클라이언트를 구현하여 도메인 객체에 대한 CRUD 작업을위한 저장소를 갖도록 생각하고있었습니다.

그러나 문제는 모든 백엔드 커뮤니케이션이 비동기식이 발생하며 응답을받을 때까지 고객이 계속 기다릴 수있는 방법이 없다는 것입니다. 즉, 낮은 레벨에서 원격 객체에서 메소드를 호출 할 수 있으며 반환 값으로 비동기를 얻습니다. 그런 다음 Asynctoken의 이벤트를 듣고 전화가 통과되었는지 또는 실패했는지 확인할 수 있습니다. 그러나 이것은 클라이언트의 기술 세부 사항을 숨기려면 저장소의 주요 아이디어를 깨뜨립니다.

두 가지 옵션이있을 수 있습니다.

  1. 저장소의 방법이 Asynctoken을 반환하도록하십시오.
  2. 메소드가 응답을 수신 할 때 채워진 빈 컬렉션 (예 : Findall의 경우)을 반환하도록하십시오.

둘 다 장단점을 가지고 있으며 나는 여러분에게서 약간의 의견을 얻고 싶습니다.

(이것을 더 취하면, 좋은 캐싱 전략은 무엇입니까? 상황에 따라, 나는 그로부터 모든 엔티티를 요청할 때마다 저장소가 서버를 호출하는 것을 원하지 않습니다. 저장소의 메소드 서명에 어떤 영향을 미칩니다. )

도움이 되었습니까?

해결책

Flex 및 Flash 리모 팅은 본질적으로 비동기식이므로 그 패러다임에 맞서 싸우면 많은 어려움이 생길 것입니다. 우리의 서비스 대표는 모든 방법에서 비동기를 반환하며 우리는 그 문제가 없었습니다.

결과/결함이 다시 올 때까지 응용 프로그램이 새보기를 렌더링하거나 다른 논리를 수행하지 않으려면 다음을 수행 할 수 있습니다.

  1. "게시물 결과/결함 코드"를 호출하는 사용자 정의 이벤트에 이벤트 리스너를 첨부하십시오.
  2. 비동기 호출을하십시오
  3. 결과/결함을 처리합니다
  4. #1에서 청취자를 트리거하기 위해 사용자 정의 이벤트를 발송합니다.

이것은 비동기 호출을 할 때마다 많은 성가신 바이트 플레이트 코드로 이어질 것입니다. 나는 당신이 실제로 동기 실행 경로가 필요한지 매우 신중하게 고려할 것입니다.

다른 팁

빈 컬렉션을 반환하는 것은 잘못된 느낌이 들기 때문에 Asynctoken을 반환하는 것이 좋습니다.

캐시에서 데이터를 반환하는 경우, 완료된 이벤트가 구독 될 때마다 (핸들러를 제거) 할 때마다 데이터로 완료 이벤트를 자동으로 발사하는 완료된 경우 (: asynctoken)을 반환합니다.

public class CompleteAsyncToken : AsyncToken
{
    public function CompleteAsyncToken(data : Object)
    {
        super(data);
    }

    public override addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false) : void
    {
        super.addEventListener(type, listener, useCapture, priority, useWeakReference);

        if (type == Event.COMPLETE)
        {
            // Don't just execute listener as EventDispatcher is not that simple
            super.dispatchCompleteEvent();
            super.removeEventListener(type, listener);
        }
    }

하나의 해협은 저장소 앞에 외관을 만드는 것입니다. 고객은 정면으로 비공식 호출을 할 것입니다. 이렇게하면 저장소가 동기식으로 계속 작업 할 수 있으며 외관은 통화의 비동기 측면을 관리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top