سؤال

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

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

المحلول

وإذا كان هناك الثوابت الذي بحاجة إلى المحافظة، ثم نعم. خلاف ذلك، لا تهتم.

نصائح أخرى

والسبب كله ليكون من يمكنهم الدخول (حاصل) والمعدلات (واضعي) هو تقديم نفسك مع مستوى إضافي من المراوغة.

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

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

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

ومستوى إضافي من indirection لحاصل / اضعي تسمح لك أيضا أن تكون قادرة على تغيير عضو البيانات التي تغلف.

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

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

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

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

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

يجب عليك استخدام البيانات العامة للأعضاء فقط

  • في الهياكل التي لا تعرض رمز العميل (على سبيل المثال.ربط نمط functors) - انها غير مجدية لحماية هياكل أن لا أحد خارج سوف تحصل من أي وقت مضى
  • إذا أنواع تلخص منطق مجموعة/الحصول عليها (على سبيل المثال.إذا قمت بإنشاء فئة ObservableAttribute)
  • إذا كانت const-أعضاء غير قابل للتغيير هيكل (لا يمكنك أن تفعل الكثير إلا أن يقرأ عليهم إذا كانوا غير قابل للتغيير)

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

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

وباستخدام وسائل الحصول على / مجموعة لأعضاء البيانات الخاص / المحمي تصميم سيئة.

وأنه يسبب رمز العميل أن يكون معتمدا على تفاصيل تنفيذ صفك.

والتغييرات في صفك تسبب تغيرات في رمز العميل.

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

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