يمكن أن يكون لديك أي وقت مضى الكثير من "محمية الظاهري" الأساليب ؟

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

  •  11-07-2019
  •  | 
  •  

سؤال

هنا سؤال لأولئك منكم مع خبرة في المشاريع الكبيرة و API/في إطار التصميم.

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

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

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

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

المحلول

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

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

نصائح أخرى

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

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

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

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

وجهة نظري هو:

  • إذا كنت يمكن المستخدم events, لها فضل protected الأساليب.
  • في محاولة لتجنب protected طرق ممكن لو غير ممكن ثم عليك أن استخدامها؛ -).

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

على virtual/غيرvirtual الفارق في الأداء لا يهم في أي الجهاز الذي هو قوي بما فيه الكفاية لتشغيل .NET Framework.

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

هل هي فكرة جيدة لجعل العديد من أساليب و خصائص protected virtual ممكن ؟

ليست فكرة جيدة.

حماية طرق افتراضية توفر نقطة التمدد في إطار حين إضافة اقتران.

هناك واعدة أكثر التقنيات لتوفير التمدد: تكوين و وفد.

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