ما هي الطريقة الصحيحة لتنفيذ التواصل بين كائنات Java؟

StackOverflow https://stackoverflow.com/questions/2477123

سؤال

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

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

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

المحلول

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

نصائح أخرى

هل فكرت في استخدام واجهات لفصل الفصول؟ لديك ثمانية فصول ، لكن من الممكن أن تحتاج فقط إلى بعض واجهات لتمكين الاتصال/قابلية التشغيل البيني بين واكتساب قدر كبير من المرونة.

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

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

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

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

هل هذه الفصول مع الدولة؟ أو مجرد مجموعة من الأساليب التي قد تكون ثابتة؟

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

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