Như bạn đã chỉ ra, bản thân đứa trẻ hiếm khi cần tiếp cận cha mẹ, miễn là cha mẹ làm tất cả công việc và theo dõi con cái. Tuy nhiên, cổ điển getParent
là hữu ích nhất khi bạn sử dụng khung từ bên ngoài.
Kịch bản
Một thao tác đơn giản có thể gây ra sự cố như sau: đưa ra hai vật dụng cụ thể nằm ở đâu đó trong cây widget tổng thể của bạn và trường hợp sử dụng yêu cầu bạn trao đổi hai cái này, việc hoán đổi hoạt động như thế nào?
Cách 1: Nói với trẻ
Nói với con của bạn để swap(withOtherChild)
. Nhưng trao đổi liên quan đến việc cập nhật cơ sở hạ tầng con cái của cha mẹ theo một cách nào đó. Vì con bạn không biết cha mẹ của nó, làm thế nào để bạn đạt được điều này?
Cách 2: Nói với bố mẹ
Nói với cha mẹ của một đứa trẻ để loại bỏ nó và thêm cái khác. Oh chờ đợi, cùng một vấn đề. Bạn chỉ có những đồ vật trẻ em và không có getParent
những thứ đó.
Cách 3: Công việc lẩm cẩm
Là một tùy chọn cuối cùng, bạn có thể duyệt qua toàn bộ cây widget của mình để tìm cha mẹ hasChild(x)
và một với hasChild(y)
và sau đó quay lại tùy chọn 2.
Giải pháp
Bạn nên giữ cha mẹ nếu bạn muốn xây dựng các cây widget lớn và thực hiện các hoạt động yêu cầu di chuyển vị trí của widget trong cây. Nếu cây widget của bạn rất nhỏ hoặc chỉ có độ sâu rất nhỏ, nhưng bộ truy cập nhanh hasChild
, thì Tùy chọn 3 có thể được chấp nhận cho bạn và bạn có thể bỏ qua tham chiếu chính.
Tài liệu tham khảo trong các cơ sở dữ liệu nói chung
Những gì bạn đang dự định làm ở đây là xây dựng cơ sở hạ tầng cho cây. Chúng ta hãy xem xét đơn giản hóa và để tranh luận cho rằng mọi widget chỉ có thể có một con. Tất nhiên, kết quả là một danh sách và câu hỏi của bạn bây giờ trở thành "tôi nên có một danh sách liên kết đơn hoặc liên kết đôi?".
Và cũng giống như danh sách, không có câu trả lời chắc chắn, mà chỉ có ưu và nhược điểm. Rõ ràng ưu điểm cho liên kết đơn (nghĩa là không có tham chiếu cha) là a) dễ thực hiện hơn và b) ít bộ nhớ hơn. Nhưng nhược điểm bao gồm a) một số hoạt động trở nên chậm vì chúng phải đi qua cấu trúc và b) không dễ dàng truy cập vào các hoạt động đó có thể có nghĩa là cơ sở hạ tầng khó sử dụng và c) nó sử dụng nhiều bộ nhớ hơn.
Mặt khác, biến thể liên kết đôi, tức là với tham chiếu cha, khá nhiều đảo ngược những ưu và nhược điểm này.
Tuy nhiên, về mặt thư viện / khung GUI, các giới hạn bộ nhớ thường không phải là vấn đề cấm các con trỏ cha. Nếu bạn loại trừ điều đó và nhận ra rằng đó là một thư viện / khung, và do đó, khó có thể thực hiện được, nhưng dễ sử dụng, thì về cơ bản bạn sẽ loại trừ những ưu điểm trên của cách tiếp cận liên kết đơn.
Tôi không nhận thức được đặc thù của dự án của bạn, vì vậy tôi muốn không nói với bạn để giữ tài liệu tham khảo cho phụ huynh, vì một số lý do trên của tôi có thể không áp dụng trong trường hợp của bạn. Tuy nhiên, nói chung, tôi coi các tham chiếu cha trong cơ sở hạ tầng widget là đáng giá vì những lý do trên.