سؤال

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

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

متى يمكنك/ينبغي عليك اتباع نهج ORM بالكامل؟

أي فكرة سيكون موضع تقدير كبير.


القليل من الخلفية:

لدي في بيئتي حوالي 50 جهاز كمبيوتر عميلًا وخادم SQL واحد قوي بشكل معقول.

لدي تطبيق سطح مكتب حيث يمكن لجميع العملاء الخمسين الوصول إلى البيانات في جميع الأوقات.

لقد مر نموذج بيانات المشروع بعدد من عمليات إعادة التنظيم لأسباب مختلفة بما في ذلك الوضوح والكفاءة وما إلى ذلك.

تاريخ نموذج البيانات الخاص بي

  1. JDBC يدعو مباشرة
  2. DAO + POJO بدون علاقات بين Pojos (يغطي JDBC بشكل أساسي).
  3. تمت إضافة علاقات بين POJOs التي تنفذ التحميل البطيء، ولكنها تقوم فقط بإخفاء المكالمات بين DAO
  4. قفزت إلى عربة السبات بعد رؤية مدى سهولة الوصول إلى البيانات (جعلت العلاقات بين POJO تافهة) ولأنها يمكن أن تقلل عدد الرحلات ذهابًا وإيابًا إلى قاعدة البيانات عند العمل مع العديد من الكيانات ذات الصلة.
  5. نظرًا لأنه كان أحد تطبيقات سطح المكتب، فإن إبقاء الجلسات مفتوحة على المدى الطويل كان بمثابة كابوس، لذلك انتهى الأمر بالتسبب في الكثير من المشكلات
  6. لقد عدت إلى نهج DAO/Hibernate الجزئي الذي يسمح لي بإجراء مكالمات JDBC مباشرة خلف ستار DAO أثناء استخدام Hibernate في نفس الوقت.
هل كانت مفيدة؟

المحلول

يكون وضع السبات أكثر منطقية عندما يعمل تطبيقك الرسوم البيانية الكائن, ، والتي تستمر في RDBMS.بدلاً من ذلك، إذا كان منطق التطبيق الخاص بك يعمل على مصفوفة بيانات ثنائية الأبعاد، فإن جلب تلك البيانات عبر JDBC المباشر يعمل بشكل أفضل.على الرغم من أن Hibernate مكتوب أعلى JDBC، إلا أنه يتمتع بقدرات قد لا يكون من السهل تنفيذها في JDBC.على سبيل المثال:

  1. لنفترض أن المستخدم يعرض صفًا في واجهة المستخدم ويغير بعض القيم وتريد إطلاق استعلام تحديث لتلك الأعمدة التي تغيرت بالفعل فقط.
  2. لتجنب الدخول في حالة توقف تام، تحتاج إلى الحفاظ على ترتيب عالمي لقواعد SQL في المعاملة.قد لا يكون الحصول على JDBC بشكل صحيح أمرًا سهلاً
  3. إعداد القفل المتفائل بسهولة.عند استخدام JDBC، عليك أن تتذكر وجود هذا في كل استعلام تحديث.
  4. قد تكون التحديثات المجمعة والتجسيد البطيء للمجموعات وما إلى ذلك غير سهلة التنفيذ في JDBC.

(انا اقول "قد كن غير تافه"، لأنه بالطبع يمكن القيام به - وقد تكون هاكرًا خارقًا :)

يتيح لك Hibernate إطلاق استعلامات SQL الخاصة بك أيضًا، في حالة الحاجة إلى ذلك.

نأمل أن يساعدك هذا على اتخاذ القرار.

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

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