وحدة العمل - ما هو أفضل نهج لتخزين كائن مؤقت على مزرعة الويب؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

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

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

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

أرى العديد من العيوب لهذا واحد.

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

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

أعتقد أن هذا نظيف من البديل الأول، ولكن لا يزال يتضمن مستويات زيادة نشاط قاعدة البيانات.

تتطلب كلا الطريقين أن لدي طريقة لإنهاء البيانات العابرة إذا تم فقد الجلسة قبل تنفيذ المستخدم تقديم الطلبات أو إلغاء الطلبات.

هل حل أي شخص هذه المشكلة بطريقة مختلفة؟

شكرا مقدما لمساعدتكم.

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

المحلول

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

لذا، على افتراض أن الكائنات لا تحتاج إلى تخزينها في قاعدة البيانات قبل الالتزام، أقدم لك خطة C:

تخزين كائنات الأعمال تهيئة في الجلسة. يمكنك بعد ذلك إنشاء جميع الأطفال الذين تريده، ولمس قاعدة البيانات فقط (وإعداد المراجع) عند ارتكاب المعاملة. إذا كانت بيانات الجلسة ستكون كبيرة (إما بشكل فردي أو جماعي)، فقم بتخزين معلومات الجلسة في قاعدة البيانات (قد تقوم بذلك بالفعل).

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