هل تحاول دائمًا التقاط مكالمات الموارد الخارجية؟

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

  •  04-07-2019
  •  | 
  •  

سؤال

هل يجب عليّ دائمًا إجراء مكالمات الموارد الخارجية في محاولة الالتقاط؟(أي.استدعاء قاعدة بيانات أو نظام ملفات) هل هناك أفضل ممارسة لمعالجة الأخطاء عند استدعاء الموارد الخارجية؟

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

المحلول

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

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

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

نصائح أخرى

أعتقد أن هناك ثلاثة أسباب لوجود كتلة الالتقاط:

  • يمكنك التعامل مع الاستثناء والاسترداد (من رمز "المستوى المنخفض")
  • تريد إعادة تغليف الاستثناء (مرة أخرى، من كود "المستوى المنخفض")
  • أنت في الجزء العلوي من المكدس، وبينما لا يمكنك استرداد العملية نفسها، فإنك لا تريد أن يتعطل التطبيق بأكمله

إذا التزمت بهذه الأشياء، فيجب أن يكون لديك عدد قليل جدًا من كتل الالتقاط مقارنةً بـ try/finally كتل - وتلك try/finally غالبًا ما تكون الكتل مجرد اتصال Dispose, ، وبالتالي من الأفضل كتابتها كـ using صياغات.

الحد الأدنى:من المهم جدًا أن يكون لديك finally كتلة لتحرير الموارد، ولكن catch يجب أن تكون الكتل عادةً أكثر ندرة.

واريك ليبرت ديه بلوق جيدة على هذا، هنا .

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

وأنت ربما، ولكن لديها "محاولة / أخيرا" للتعامل مع إدارة الموارد. أو حتى أكثر نظافة، و"باستخدام" كتلة أن تفعل الشيء نفسه.

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

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

في حالات أخرى، كنت لا تهتم ما إذا كنت فشلت في تحديث ديسيبل أو لا. ثم تستهلك باستثناء ما يرام.

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

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