Tôi muốn triển khai mẫu MVC trong một tình huống khó khăn. Khó khăn là các Mô hình của tôi (các thực thể tạo ra các sự kiện) tồn tại lâu dài, trong khi các khung nhìn (người nhận các sự kiện) là ngắn ngủi. Vấn đề của tôi là thông qua kết nối giữa hai mô hình, các Mô hình tồn tại lâu dài giữ cho Chế độ xem sống ngắn của tôi tồn tại, tức là chúng không thể được thu gom rác.Cách triển khai mẫu MVC mà không giữ Chế độ xem còn sống
[MODEL] ------- <weak> -------> [VIEW]
|
<strong>
|
v
[CONTROLLER]
Một cách để làm việc xung quanh này là để lưu trữ các kết nối trong mô hình trong một WeakHashMap < View, Controller >. Điều này về cơ bản cho phép xem được rác thu thập, và khi điều đó xảy ra, WeakHashMap sẽ ném điều khiển tương ứng ra, quá. Tức là, nếu Controller không giữ một tham chiếu (mạnh) vào View - nó thường làm. Trong trường hợp này, Chế độ xem được giữ nguyên thông qua các tham chiếu mạnh mẽ cho đến khi Mô hình nằm ngoài phạm vi.
[MODEL] ------- <weak> -------> [VIEW]
| ^
<strong> |
| |
v |
[CONTROLLER] ----------- <strong> ---/
Có cách nào khác để đính kèm người nghe vào mô hình của tôi không giữ cho chế độ xem của tôi (và bộ điều khiển) còn sống không?
CẬP NHẬT: Để trả lời câu hỏi của mdma: Bộ điều khiển giữ tham chiếu đến Chế độ xem vì nó cần cập nhật Chế độ xem. Tham chiếu này có thể yếu, nhưng tôi muốn có các bộ điều khiển là các lớp bên trong vô danh của lớp View, trong trường hợp đó cá thể Controller có một tham chiếu mạnh tiềm ẩn đối với cá thể View.
Tại sao bộ điều khiển có một tham chiếu mạnh để xem? – mdma