عندما كان يتطلب علاقات نموذج، كيف يمكنني حماية من الأخطاء؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

عند لقد بنيت التطبيق، وضعت الكثير من التركيز على التصديقات التي من شأنها ضمان أن جميع القطع يجب أن يكون في المكان قبل كل شيء تم حفظها في قاعدة البيانات. هذا وقد عملت من خيالي حتى الآن، وكان التطبيق الحي وقصفت على ما يقرب من 6 أشهر، والتي تخدم ما يقرب من 150،000 طلب شهريا مع عدم وجود السقطات أو أخطاء. حتى الأسبوع الماضي.

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

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

وأعرف أن هذا السؤال هو غارق في عمومية، وإذا كنت يمكن أن يكون أكثر تحديدا في ما أعنيه، واسمحوا لي أن نعرف في التعليقات.

نصائح أخرى

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

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

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

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

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

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

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

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

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

scroll top