سؤال

واريد ان افعل هذا (أي لغة معينة):

print(foo.objects.bookdb.books[12].title);

وأو هذا:

book = foo.objects.bookdb.book.new();
book.title = 'RPC for Dummies';
book.save();

وأين فو هو في الواقع خدمة توصيل برنامجي عبر بعض IPC، والوصول إلى أساليب والأشياء، وبعض طبقة يرسل الواقع ويتلقى رسائل عبر الشبكة.

والآن، أنا لا حقا تبحث عن آلية IPC، كما أن هناك الكثير للاختيار من بينها. فمن المحتمل أن لا يكون على أساس XML، وإنما الصورة. العاشر. مثل جوجل بروتوكول مخازن، DBus تثبيت أو كوربا. ما أنا متأكد عنه هو كيفية تنظيم تطبيق حتى أتمكن من الوصول إلى IPC مثلما كنت أي كائن.

في بعبارة أخرى، كيف يمكن أن لدي OOP التي تعين بشفافية عبر حدود العملية؟

وليس ذلك هذا هو السؤال التصميم وأنا لا تزال تعمل على مستوى عال جدا من البناء الشامل. لذلك أنا الملحد جدا بعد عن اللغة التي هذا سيكون في. C #، جافا وبايثون كلها المرجح أن تعتاد، وإن كان.

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

المحلول

ويجب أن لا تفعل ذلك! من المهم جدا للمبرمجين لرؤية ونرى الفرق بين IPC / RPC واستدعاء أسلوب المحلية في التعليمات البرمجية. اذا كنت تجعل من ذلك، أنهم لم يكن لديك للتفكير في الامر، وأنها لن تفكر في ذلك، والتي من شأنها أن تؤدي إلى سيئة للغاية أداء التعليمات البرمجية.

وفكر:

foreach o, o.isGreen in someList { 
   o.makeBlue; 
}

ويفترض أن مبرمج الحلقات يأخذ بضعة نانو ثانية لإكمال، بدلا من ذلك يأخذ بالقرب من ثانية إذا حدث someList أن يكون جهاز التحكم عن بعد.

نصائح أخرى

وأعتقد أن طريقة لفعل ما كنت تطلب هي أن يكون كل الاتصالات الكائن تعتبر رسالة المارة. هذه هي الطريقة التي يتم التعامل مع أساليب الكائن في روبي ومن Smalltalk، وغيرها.

ومع مرور الرسالة (بدلا من طريقة الدعوة) ك آلية اتصال الكائن، ثم عمليات مثل استدعاء أسلوب التي لم تكن موجودة عندما كتبته رمز يصبح من المعقول ككائن يمكن أن تفعل شيئا معقولا مع الرسالة على أية حال (الاختيار لإجراء بعيد إرجاع قيمة لحقل بنفس الاسم من قاعدة بيانات، وما إلى ذلك، أو رمي "طريقة غير موجود 'استثناء، أو أي شيء آخر يمكن أن يخطر لك).

ومن المهم أن نلاحظ أن للغات التي لا تستخدم هذه كآلية افتراضي، يمكنك القيام به رسالة يمر على أي حال (كل كائن لديه طريقة "handleMessage ') ولكنك لن تحصل على جماليات بناء الجملة، وأنت ربحت 'ر تكون قادرة على الحصول IDE مساعدة دون بعض الجهد الإضافي على الجزء الخاص بك للحصول على IDE تحليل طريقة handleMessage الخاص بك للتحقق من مدخلات صحيحة.

وتقرأ على جاوة RMI - التمهيدية معارض مواد كيف يمكن أن يكون تعريفا محليا من كائن بعيد.

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

ويمكنك تحديد زوج من الطبقات بحيث يمكن للعميل أن يكون

foo= NonLocalFoo( "http://host:port" )
foo.this= "that"
foo.save()

ويتلقى الخادم set_this () وحفظه () طلبات طريقة من اتصال العميل. على جانب الملقم (عموما) غير تافهة لديك مجموعة من القضايا اكتشاف وإدارة المثال.

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