سؤال

نحن نعمل على العميل الغنية (مكتوب في فليكس) متصل جافا الخلفية, باستخدام كل RMI و الدائرة.كنت أفكر في تنفيذ العميل في DDD الأزياء بحيث أن لديها مستودعات في عمليات الخام على كائنات المجال.

المشكلة هي أن كل الخلفية يحدث التواصل غير المتزامن وليس هناك طريقة لإجبار العميل في انتظار أن تستمر حتى تلقى استجابة.وهذا يعني أنه في مستوى منخفض ، يمكنني استدعاء أسلوب على كائن بعيد وأنا على AsyncToken باعتباره قيمة الإرجاع.أستطيع ثم الاستماع إلى الأحداث على asynctoken لمعرفة ما إذا كانت الدعوة قد مرت أو فشل.هذا ومع ذلك فواصل الفكرة الرئيسية خلف مستودع من أجل إخفاء التفاصيل التقنية من العميل.

قد يكون هناك 2 خيارات أعتقد:

  1. يجب الطرق على مستودع عودة asynctoken الذي يبدو مثل فوضوي حل لي
  2. لديهم طرق العودة فارغة جمع (عن findAll على سبيل المثال) التي سوف تحصل على تعبئة عندما يتم تلقي استجابة.

على حد سواء لديها إيجابيات وسلبيات أود الحصول على بعض المدخلات من يا رفاق.

(أخذ هذا أبعد ما يمكن أن تكون جيدة التخزين المؤقت استراتيجيات ؟ Dependind على الوضع ، أنا لا أريد مستودع للاتصال الخادم في كل مرة أرجو من جميع الجهات من ذلك.كيف يمكن أن يؤثر على التوقيع على الطرق على مستودع.)

هل كانت مفيدة؟

المحلول

فليكس فلاش عن بعد هو بطبيعته غير متزامن حتى القتال ضد هذا النموذج سوف تعطيك الكثير من المتاعب.لدينا خدمة المندوبين العودة AsyncToken من كل طريقة و لم يكن لدينا مشكلة في ذلك.

إذا كنت ترغب في التأكد من أن التطبيق لا تجعل طريقة عرض جديدة أو أداء بعض المنطق حتى النتيجة/خطأ يأتي مرة أخرى, هل يمكن أن تفعل ما يلي:

  1. إرفاق المستمع الحدث مخصصة الحدث الذي سوف تحتج الخاص بك "بعد النتيجة/رمز خطأ"
  2. جعل المتزامن الاتصال
  3. التعامل مع النتيجة/خطأ
  4. إرسال حدث مخصص لتحريك المستمع الخاص بك من #1

نضع في اعتبارنا أن هذا سوف يؤدي إلى الكثير من مزعج boilterplate رمز في كل مرة كنت جعل الاتصال المتزامن.وأود أن تنظر بعناية ما إذا كنت حقا بحاجة إلى تنفيذ متزامن المسار.

نصائح أخرى

أنصح إعادة AsyncToken كما تعود فارغة جمع خاطئ.

في حالة إرجاع البيانات من ذاكرة التخزين المؤقت ، العودة CompletedAsyncToken (: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);
        }
    }

واحد straegy إنشاء واجهة أمام مستودع.العميل الخاص بك سوف تجعل asychronous يدعو إلى الواجهة وهذا بدوره يجعل متزامن الدعوة إلى المستودع الخاص بك.هذا سوف يسمح المستودع الخاص بك على مواصلة العمل في نحو متزامن في حين أن واجهة يدير غير متزامن جوانب من الاتصال بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top