لماذا يبدو أن السبات مصمم لجلسات قصيرة الأمد؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

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

لماذا لم يصمموه بحيث يُعاد فتح الجلسة تلقائيًا، أو تظل الجلسات مفتوحة دائمًا؟

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

المحلول

لأنه بمجرد خروجك من حدود معاملتك، لن تتمكن من الوصول إلى قاعدة البيانات مرة أخرى دون بدء معاملة جديدة.يعد إجراء معاملات طويلة الأمد "احتياطيًا" أمرًا سيئًا (tm).

أعتقد أنك تريد تحميل الكائن البطيء من وجهة نظرك - ألقِ نظرة هنا لبعض الخيارات.أفضل أن أحدد بالضبط مقدار خريطة الكائنات التي سيتم إرجاعها بواسطة طرق واجهة الجلسة الخاصة بي.أجد أن هذا يجعل من السهل اختبار الوحدة واختبار الأداء لمستوى عملي.

نصائح أخرى

لقد عملت على تطبيق سطح مكتب يستخدم EJB وHibernate.كان علينا أن نضع lazy=false في كل مكان، لأنه عندما يتم إجراء تسلسل للكائنات، فإنها تفقد قدرتها على جلبها من الواجهة الخلفية.هذه هي الطريقة التي تسير بها الأمور، لسوء الحظ.

إذا كنت مهتمًا بالأداء، فيمكنك استخدام التخزين المؤقت على الواجهة الخلفية حتى لا تكون عمليات الجلب غير الكسولة مؤلمة.

أنت تبحث عن نمط OpenSessionInView، وهو في الأساس مرشح مفاهيمي (ويتم تنفيذه أحيانًا كمرشح servlet) يكتشف متى يجب إعادة فتح الجلسة بشفافية.تنفذ العديد من الأطر هذا الأمر بحيث تتعامل معه تلقائيًا.

أنا أكتب تطبيقًا لسطح المكتب لذا فإن استخدام الفلتر غير قابل للتطبيق.

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

إذا نظرت إلى MS ADO.NET، فسوف ترى تركيزًا مشابهًا على إبقاء الاتصالات مفتوحة لفترة قصيرة - لديهم نموذج كامل غير متصل بالإنترنت لتحديث البيانات المنفصلة ثم تطبيقها على قاعدة البيانات عندما تكون جاهزًا.

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

إذا كان سيتم إعادة فتح الجلسات بطريقة سحرية في غير تطبيقات الويب، فأعتقد أن تعقيد تعلم إطار العمل سيفوق الفوائد بكثير.

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