Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hạn chế của việc sử dụng singletons trong mvvmcross là gì


Hạn chế của việc sử dụng singletons trong mvvmcross là gì


Singletons, trong khi hữu ích để đảm bảo một trường hợp duy nhất của một lớp, có một số nhược điểm có thể ảnh hưởng đến khả năng duy trì và khả năng mở rộng của các ứng dụng, bao gồm cả những ứng dụng sử dụng MVVMCROSS. Dưới đây là một số vấn đề chính:

1. Các vấn đề về khả năng kiểm tra **

Singletons nổi tiếng là khó kiểm tra vì họ giữ nhà nước và quản lý vòng đời của chính họ. Điều này làm cho nó khó khăn khi viết các bài kiểm tra đơn vị không vô tình tương tác với mạng hoặc các hệ thống bên ngoài khác. Trong MVVMcross, trong đó thử nghiệm là rất quan trọng để đảm bảo độ tin cậy của các mô hình xem và các thành phần khác, singletons có thể cản trở khả năng cô lập và kiểm tra các thành phần riêng lẻ một cách hiệu quả [1] [4].

2. Các vấn đề không nhất quán và đa luồng dữ liệu **

Trong môi trường đa luồng, singletons có thể dẫn đến sự không nhất quán của dữ liệu nếu không được đồng bộ hóa đúng cách. Điều này có thể dẫn đến hành vi không xác định, khiến cho các vấn đề khó gỡ lỗi. Mặc dù có thể làm cho singletons an toàn, nhưng điều này làm tăng thêm sự phức tạp và không phải lúc nào cũng được thực hiện chính xác [2] [4].

3.

Singletons khuyến khích các phụ thuộc ẩn bằng cách cung cấp một điểm truy cập toàn cầu vào tài nguyên. Điều này có thể dẫn đến sự kết hợp chặt chẽ giữa các lớp, vì tất cả chúng đều phụ thuộc vào việc thực hiện cụ thể của Singleton. Trong MVVMcross, trong đó khớp nối lỏng lẻo có lợi cho việc duy trì kiến ​​trúc sạch, singletons có thể làm suy yếu nguyên tắc này bằng cách gây khó khăn cho việc thay đổi hoặc thay thế các thành phần mà không ảnh hưởng đến toàn bộ hệ thống [2] [3].

4. Vi phạm các nguyên tắc rắn **

Singletons vi phạm một số nguyên tắc vững chắc:
- Nguyên tắc trách nhiệm duy nhất (SRP): Singletons thường quản lý vòng đời của riêng họ ngoài trách nhiệm chính của họ, điều này có thể dẫn đến sự phức tạp không cần thiết.
-Nguyên tắc đảo ngược phụ thuộc (DIP): Các mô-đun cấp cao không nên phụ thuộc vào các chi tiết cấp thấp, nhưng với các đơn lẻ, chúng thường làm, vì chúng dựa vào việc triển khai cụ thể của Singleton [2] [3].

5. Khả năng mở rộng và giới hạn tính linh hoạt **

Singletons có thể hạn chế khả năng mở rộng bằng cách gây khó khăn cho việc thích ứng với các yêu cầu thay đổi. Nếu một ứng dụng cần xử lý nhiều trường hợp tài nguyên hoặc thay đổi cách quản lý tài nguyên, singletons có thể trở thành một nút cổ chai. Trong MVVMcross, nơi tính linh hoạt rất quan trọng để xử lý các nền tảng và cấu hình khác nhau, singletons có thể hạn chế các khả năng này [7].

6. Những thách thức quản lý nhà nước **

Singletons mang trạng thái suốt đời của ứng dụng, điều này có thể gây khó khăn cho việc thiết lập lại hoặc quản lý trạng thái hiệu quả. Điều này đặc biệt có vấn đề trong các ứng dụng trong đó trạng thái cần được làm mới hoặc cập nhật thường xuyên [4].

Giải pháp thay thế cho singletons

Để tránh những nhược điểm này, các nhà phát triển thường chuyển sang tiêm phụ thuộc như một sự thay thế linh hoạt và có thể duy trì hơn. Tiêm phụ thuộc cho phép các thành phần được ghép nối một cách lỏng lẻo và dễ dàng được kiểm tra bằng cách cung cấp các phụ thuộc thông qua các hàm tạo hoặc các phương tiện khác, thay vì dựa vào các trường hợp toàn cầu [1] [7]. Trong MVVMcross, sử dụng tiêm phụ thuộc có thể giúp duy trì kiến ​​trúc sạch, có thể mở rộng, dễ kiểm tra và duy trì hơn.
Trích dẫn:
.
[2] https://www.youtube.com/watch?v=x6GBDWFNIN4
[3] https://www.davidtanzer.net/david's%20blog/2016/03/14/6-reasons-why-you-should-avoid-singletons.html
[4] https://matteomanferdini.com/swift-singleton/
[5] https://forums.kodeco.com/t/why-i-cant-use-singleton-why-it-is-bad-design-pattern/56168
.
[7] https://www.linkedin.com/advice/0/what-benefits-drawbacks-using-singleton-1e
[8] https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what