سؤال

ما هو نوع من الأشياء عليك أن تستخدم سمات مخصصة. NET لفي العالم الحقيقي؟

ولقد قرأت العديد من المقالات حول لهم، ولكن أنا لم تستخدمها سمات مخصصة.

وأشعر أنني يمكن أن تطل عليهم عندما يمكن أن تكون مفيدة.

وانا اتحدث عن الصفات التي تقوم بإنشائها، وليس تلك التي يتم تضمينها بالفعل في هذا الإطار.

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

المحلول

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

ورمز التحقق من الصحة، على سبيل المثال، أن ننظر بشيء من هذا القبيل:

public class Customer
{
     [CreditCardValidator]
     string creditCardNumber;

     [AddressValidator]
     string addressLineOne
}

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

سمات مخصصة

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

نصائح أخرى

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

مثال:

[Command(HelpText = "Lists active users")]
void ListUsers(void)
{

}

[Command(HelpText = "Terminate a specific user's connection")]
void EndConnection(int userID)
{

}

وكما يستخدمه:

MyScriptEngine>>  Help
Available Commands are:
    ListUsers: Lists active users
    EndConnection {userID}: Terminate a specific user's connection

MyScriptEngine>> EndConnection 3
    User 3 (Michael) has had his connection terminated.

MyScriptEngine>>

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

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

ومنها مثلا. وأود أن يكون هناك تعداد للدولة كائن. وبناء على هذه الحالة، لا بد لي ربما 3 أو 4 أماكن مختلفة في التعليمات البرمجية التي أود أن تفعل 'مفتاح' من هذا التعداد وتنفيذ بعض العمليات. بعض المطورين الآخرين يمكن بسهولة إدخال خلل بإضافة تعداد جديد ولكن لا يعالج في إحدى العبارات التبديل في مكان آخر في التعليمات البرمجية.

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

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

ولم أجد حقا استخدام مخصص سمات اعتبارا من بعد. وكانت هناك بعض الحالات التي يكون فيها I thaught أنها قد تكون مناسبة ولكن لم تستخدمها بسبب ما يبدو انعكاس تشارك في قراءة مخصصة سمات يعد مكلفا للغاية.

سمات

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

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

وكنت قد استخدمت في أحد الأطر ORM الذي أنا وضعت استنادا إلى نمط أكتيفيريكورد. وهذا هو نفس النوع من تنفيذ ما هو متاح في مشروع LINQ، قلعة الخ.

وكان يسمى الإطار "SkyFramework"، لكنه لم يكن مفتوحة المصدر.

وعلى سبيل المثال؛ مجرد مثال الخام ...

وسوف تجد أمثلة مشابهة في مشاريع مفتوحة المصدر الأخرى كذلك.

و

[Sky.Table ("user")]
public class User
{
    [Sky.Column ("username")]
    public string UserName;

    [Sky.Column ("pwd")]
    public string Password;
}

و

ملحوظة: السمة "الجدول"، كانت "الأعمدة" سمات مخصصة في ذلك الوقت

ومحرك أكتيفيريكورد يوزع الكائن هذه السمات ويولد وظائف منها عن CRUD ... الخ ...

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

[Sky.BenchMark()]
public void LongRunningMethod(..)
{
}

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

وهناك كتاب Apress متاح في هذا الموضوع .. التطبيقية Attribues. NET التي قد تكون عونا لك.

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