أفضل طريقة لتأكيد الشرط المسبق وبعد حالة من الحجج والقيم في. NET؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

وبعض الناس يوصون Debug.Assert في حين يتحدث آخرون عن استخدام تعليمة if بالإضافة إلى إلقاء استثناء. ما هي إيجابيات وسلبيات كل منها؟

وماذا الأطر المتوفرة أن تنصحني؟

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

المحلول

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

لمزيد من التفاصيل، انظر منصبي عن هذا .

نصائح أخرى

وثمة خيار آخر هو المواصفات # .

المواصفات # هو امتداد للوجوه المنحى لغة C #. فهي تمتد على نظام نوع لتشمل أنواعا غير خالية ودققت الاستثناءات. ويوفر عقود الأسلوب في شكل قبل وpostconditions فضلا عن الثوابت الكائن.

وأنا أفضل استثناءات على يؤكد أنه إذا كان من المفترض أن تكون على هذا النحو وليس الآن، أريد أن أعرف عن ذلك حتى أتمكن من إصلاحه، والتغطية نحصل في وضع التصحيح هو أي مكان بالقرب من استخدام واقع الحياة أو تغطية ، وذلك فقط باستخدام Debug.Assert لا تفعل ما فيه الكفاية.

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

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

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

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

هل يمكن أن يكون النظر في إطار بطلاقة في http://conditions.codeplex.com/ مفتوح المصدر ومجاني.

والمواصفات # هو طريقة للقيام بذلك، وهي مجموعة شاملة من C #. الآن لديك " كود العقود "، والذي هو نسخة الملحد اللغة من المواصفات #، وحتى الآن يمكن أن يكون لديك عقود التعليمات البرمجية في VB.NET، على سبيل المثال.

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