تم تصميم "MVXConvertingTargetBinding` في MVVMCross لمنع استثناءات مرجعية فارغة من خلال تنفيذ العديد من الميزات الرئيسية التي تضمن التعامل القوي للقيم والتحويلات الفارغة. إليك كيف تساعد على منع مثل هذه الاستثناءات:
1. بنية الفئة الأساسية: `mvxConvertingTargetBinding` يرث من` mvxtArgetBinding` ، والذي يوفر أساسًا للتعامل مع الارتباطات. تتضمن هذه الفئة الأساسية آليات لإدارة الكائن المستهدف والتعامل مع أحداث المعالجة ، والتي تتضمن بطبيعتها عمليات فحص للمراجع الخالية.
2. الضعف للهدف: فئة "mvxtArgetBinding` ، والتي تستمد منها mvxConvertingTargetBinding" ، تستخدم "DepReference" لعقد الكائن المستهدف. يساعد هذا النهج في منع تسرب الذاكرة ويضمن أن يتم جمع الكائن المستهدف القمامة إذا لزم الأمر. على الرغم من أنها لا تمنع استثناءات مرجعية فارغة مباشرة ، إلا أنها تساعد في إدارة مدى عمر الكائن ، مما يقلل من احتمال حدوث خريجة غير متوقعة.
3. الطرق الافتراضية لتخطي setValue: "MVXConvertingTargetBinding" توفر طرقًا افتراضية مثل `chaveSkipsetValueForViewSpecificReasons ()` و `qustkipsetvalueforplatformspecificReasons ()`. تتيح هذه الأساليب للمطورين تنفيذ المنطق الذي يمكن أن يتخطى إعداد قيمة إذا تم استيفاء شروط معينة ، وربما تتجنب السيناريوهات التي قد تسبب القيم الفارغة مشكلات.
4. دعم المحول: تتمثل الوظيفة الأساسية لـ `mvxConvertingTargetBinding` في دعم المحولات ، والتي يتم استخدامها لتحويل القيم بين المصدر والهدف. على الرغم من أن المحولات نفسها لا تمنع بطبيعتها الاستثناءات المرجعية الخالية ، إلا أنه يمكن تصميمها للتعامل مع القيم الخالية بأمان. على سبيل المثال ، قد يقوم المحول بإرجاع قيمة افتراضية أو سلسلة فارغة إذا كان الإدخال فارغًا.
5. معالجة الأحداث: في الارتباطات ثنائية الاتجاه ، يتعامل "MVXConvertingTargetBinding` إنه يضمن أن يتم إرفاق معالجات الأحداث بشكل صحيح وفصله ، مما يساعد على منع استثناءات مرجعية فارغة من خلال تجنب محاولات استدعاء الأساليب على الكائنات الفارغة.
6. ممارسات البرمجة الدفاعية: على الرغم من أنها ليست جزءًا من فئة "MVXConvertingTargetBinding" نفسها ، إلا أنه يتم تشجيع المطورين الذين يستخدمون هذه الفئة على متابعة ممارسات البرمجة الدفاعية. يتضمن ذلك التحقق من المراجع الخالية قبل محاولة استخدامها ، وهو أمر بالغ الأهمية في منع استثناءات المرجع الفارغ.
باختصار ، في حين أن "mvxConvertingTargetBinding` لا يمنع استثناءات مرجعية فارغة مباشرة من خلال الفحوصات الخالية الصريحة ، فإنها توفر إطارًا يشجع على التعامل القوي مع الارتباط والتحويلات ، مما يقلل من احتمال وجود مثل هذه الاستثناءات. لا يزال يتعين على المطورين تنفيذ عمليات الفحص الخالية وممارسات البرمجة الدفاعية عند استخدام هذه الفئة لضمان أن رمزهم قوي مقابل استثناءات مرجعية فارغة.
الاستشهادات:[1] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[2] http://mcx.space/wiki/index.cgi؟doc٪2freadme
[3] https://rubberduckvba.blog/2020/10/25/making-mvvm-work-
[4] https://blog.postsharp.net/nullreferenceexception-object- reference-not-set
[5] https://www.christianfindlay.com/blog/stop-nullreferenceExceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onewaytosource-with-onetime-initalization-of-darget
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceexception؟view=net-9.0