هل يوجد إطار عمل قياسي للتحقق من صحة معلمات .NET يستخدم السمات؟

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

سؤال

هل يوجد إطار عمل قياسي (ربما جزءًا من مكتبة المؤسسة...أو .NET نفسه) الذي يسمح لك بالتحقق من صحة المعلمة الشائعة في سمات الطريقة؟

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

المحلول

عقود كود مايكروسوفت, ، والتي تعد جزءًا من .NET Framework منذ 4.0 CTP وهي متاحة لإصدارات .NET Framework السابقة كحزمة مستقلة، تسمح بتحديد افتراضات الترميز.يتضمن ذلك تحديد الشروط المسبقة التي يمكنها التحقق من المعلمات.

مثال على الاستخدام لفحص المعلمات سيكون (منسوخ من توثيق عقود الكود):

public Rational(int numerator, int denominator)
{
    Contract.Requires(denominator ! = 0);

    this.numerator = numerator;
    this.denominator = denominator;
}

تتمثل فائدة استخدام Code Contracts في أنها مكتبة ستكون جزءًا من إصدارات .NET Framework المستقبلية، لذلك عاجلاً أم آجلاً سيكون لديك تبعية واحدة أقل في تطبيقك.

يحرر: لاحظت للتو أنك تطلب على وجه التحديد مكتبة تستخدم السمات للتحقق من الوسيطات ...أن عقود القانون لا.تم إدراج سبب عدم استخدام عقود التعليمات البرمجية للسمات في التعليمات:

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

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

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

عدم وجود دعم IDE: يتم التعبير عنها كسلاسل، ولا يوجد دعم لـ Intellisense، أو التحقق من النوع، أو إعادة البناء، وكلها متاحة لتأليف العقود كرمز.

نصائح أخرى

تحتوي مكتبة Microsoft Enterprise Library على مكتبة/مساحة الاسم Microsoft.Practices.EnterpriseLibrary.Validation التي تسمح بالتحقق من الصحة باستخدام السمات.

على الرغم من توقف Microsoft Code Contracts لفترة من الوقت، إلا أنها لا تزال مستضافة في MS Research ولا يمكنك استخدام التكوين (app.config/database وما إلى ذلك) لتشغيل/إيقاف التشغيل أو حتى تغيير القواعد.مكتبتي الحارس لا توفر تعريف القاعدة التصريحية:السمات في التعليمات البرمجية المصدر أو إدخالات app.config للقواعد على مستوى فئة/خاصية الكيان.المكتبة مفتوحة المصدر ضمن LGPL (يمكنك استخدامها بحرية في المنتجات التجارية).إذا قمت بتكوين القواعد عبر app.config، فيمكنك ضبط إعدادات القاعدة دون الحاجة إلى إعادة الترجمة.

البيانات الديناميكية يتيح لك ASP.NET (و ASP.NET MVC) التحقق من صحة خصائص النموذج باستخدام السمات.

يمكنك أيضًا استخدام com.postشارب وتنفيذ السمات الخاصة بك للتحقق من الصحة.

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