`MVXConvertingTargetBinding` trong MVVMcross được thiết kế để ngăn chặn các ngoại lệ tham chiếu null bằng cách thực hiện một số tính năng chính đảm bảo xử lý mạnh mẽ các giá trị và chuyển đổi null. Đây là cách nó giúp ngăn chặn các ngoại lệ như vậy:
1. Cấu trúc lớp cơ sở: `mvxConvertingTargetBinding` kế thừa từ` mvxtargetbinding`, cung cấp một nền tảng để xử lý các ràng buộc. Lớp cơ sở này bao gồm các cơ chế để quản lý đối tượng mục tiêu và các sự kiện xử lý, vốn đã liên quan đến việc kiểm tra các tài liệu tham khảo null.
2. Suy yếu đến mục tiêu: Lớp `mvxtargetBinding`, từ đó` mvxConvertingTargetBinding` xuất phát, sử dụng `stressReference` để giữ đối tượng đích. Cách tiếp cận này giúp ngăn ngừa rò rỉ bộ nhớ và đảm bảo rằng đối tượng đích có thể được thu thập rác nếu cần thiết. Mặc dù nó không trực tiếp ngăn chặn các ngoại lệ tham chiếu null, nhưng nó giúp quản lý tuổi thọ đối tượng, giảm khả năng nulls bất ngờ.
3. Các phương thức ảo để bỏ qua setValue: `mvxConvertingTargetBinding` cung cấp các phương thức ảo như` NOTSKIPSETVALUEFORVIEDSPECECREASONS () `và` NOTSKIPSETVALUEFORPLATFORMSONSONSONS (). Các phương pháp này cho phép các nhà phát triển thực hiện logic có thể bỏ qua việc thiết lập giá trị nếu đáp ứng một số điều kiện nhất định, có khả năng tránh các tình huống trong đó các giá trị null có thể gây ra vấn đề.
4. Hỗ trợ bộ chuyển đổi: Hàm chính của `MVXConvertingTargetBinding` là để hỗ trợ các bộ chuyển đổi, được sử dụng để biến đổi các giá trị giữa nguồn và mục tiêu. Mặc dù bản thân các bộ chuyển đổi vốn không ngăn chặn các ngoại lệ tham chiếu null, nhưng chúng có thể được thiết kế để xử lý các giá trị null một cách duyên dáng. Ví dụ: một bộ chuyển đổi có thể trả về một giá trị mặc định hoặc một chuỗi trống nếu đầu vào là null.
5. Xử lý sự kiện: Trong các ràng buộc hai chiều, `MVXConvertingTargetBinding` xử lý các sự kiện để cập nhật nguồn khi mục tiêu thay đổi. Nó đảm bảo rằng các trình xử lý sự kiện được gắn và tách ra đúng cách, giúp ngăn chặn các ngoại lệ tham chiếu null bằng cách tránh các nỗ lực gọi các phương thức trên các đối tượng null.
6. Thực tiễn lập trình phòng thủ: Mặc dù không rõ ràng là một phần của lớp `MVXConvertingTargetBinding`, các nhà phát triển sử dụng lớp này được khuyến khích tuân theo các hoạt động lập trình phòng thủ. Điều này bao gồm kiểm tra các tài liệu tham khảo null trước khi cố gắng sử dụng chúng, điều này rất quan trọng trong việc ngăn chặn các ngoại lệ tham chiếu null.
Tóm lại, trong khi `MVXConvertingTargetBinding` không trực tiếp ngăn chặn các ngoại lệ tham chiếu null thông qua kiểm tra null rõ ràng, nó cung cấp một khung khuyến khích xử lý mạnh mẽ các ràng buộc và chuyển đổi, giảm khả năng của các ngoại lệ đó. Các nhà phát triển vẫn nên thực hiện kiểm tra null và thực hành lập trình phòng thủ khi sử dụng lớp này để đảm bảo mã của họ mạnh mẽ so với các ngoại lệ tham chiếu NULL.
Trích dẫn:[1] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[2] http://mcx.space/wiki/index.cgi?doc%2freadme
.
[4] https://blog.postsharp.net/nullreferenceexception-object-reference-not-set
[5] https://www.christianfindlay.com/blog/stop-nullreferenceException
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onewaytosource-with-onetime-initalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceexception?view=net-9.0