Liên kết con với cha mẹ - ý tưởng tồi?


15

Tôi có một tình huống mà cha mẹ tôi biết về nó là con (duh) nhưng tôi muốn đứa trẻ có thể tham khảo cha mẹ. Lý do cho điều này là tôi muốn đứa trẻ có khả năng tự chỉ định là quan trọng nhất hoặc ít quan trọng nhất khi nó cảm thấy như vậy. Khi đứa trẻ làm điều này, nó sẽ di chuyển nó lên trên cùng hoặc dưới cùng của con cái của cha mẹ.

Trước đây, tôi đã sử dụng một tài sản WeakReference cho đứa trẻ để giới thiệu lại cha mẹ của mình, nhưng tôi cảm thấy điều đó làm tăng thêm sự phiền toái, nhưng có lẽ đó là cách tốt nhất để làm điều đó.

Đây chỉ là một ý tưởng tồi? Làm thế nào bạn sẽ thực hiện khả năng này khác nhau?

Cập nhật 1: Thêm nhiều bối cảnh. Đây là một hệ thống kết xuất, vì vậy bộ chứa cha là một danh sách các cửa sổ được nhóm lại với nhau. Mục con (cửa sổ) có nội dung "Tôi quan trọng nhất!" về cơ bản muốn được hiển thị trên đầu của phần còn lại của các cửa sổ.

Cha mẹ chỉ là một thùng chứa logic để nhóm những đứa trẻ này lại với nhau. Tôi có thể thấy việc thêm một sự kiện để báo hiệu yêu cầu lên đầu là một ý tưởng hay. Nhưng thực hiện (những gì trẻ muốn làm với cha mẹ) sang một bên, tại sao bạn không muốn có con-> liên kết cha mẹ? Danh sách liên kết đôi làm điều này để mọi người có thể đi qua và từ một cái gì đó.


3
Bạn không cần a WeakReference. Trình thu gom rác .net có thể xử lý các chu kỳ. Nếu đứa trẻ không còn được sử dụng (cha mẹ không chỉ vào nó), nó sẽ được thu thập mặc dù có chứa một tham chiếu đến cha mẹ.
dbkk

Điều gì xảy ra nếu cả hai đứa trẻ đều nghĩ rằng chúng muốn trở thành những đứa trẻ quan trọng nhất?
btilly

@btilly Đứa trẻ quan trọng nhất thực sự chỉ sắp xếp lại nó vào đầu ngăn xếp trong danh sách con của cha mẹ. Vì vậy, bất cứ ai làm điều đó kéo dài, trở nên quan trọng nhất. Trong kịch bản của tôi, bạn sẽ không bao giờ có xung đột quan trọng nhất.
Thraka

Câu trả lời:


18

Đây chỉ là một ý tưởng tồi?

Thường xuyên.

  • Nó phá vỡ sự đóng gói của cha mẹ.
  • Nó tăng khớp nối trong cả hai.
  • Nó phục vụ như một điểm đột phá để đứa trẻ có được ở phần còn lại của hệ thống, tăng khả năng ghép nối với bất cứ thứ gì mơ hồ gần nó (vì mọi người sẽ lạm dụng tài liệu tham khảo đó)
  • Nó giới hạn thiết kế của bạn nếu bạn muốn trẻ em không có cha mẹ.

Làm thế nào để làm điều đó tốt hơn? Đứa trẻ không nên biết hoặc quan tâm rằng nó nằm trong một bộ sưu tập. Thay vì coi bản thân nó quan trọng, nó nên báo hiệu rằng một số sự kiện mà nó biết đã xảy ra để bất kỳ ai quan tâm (cha mẹ) có thể tăng mức độ ưu tiên của mình (hoặc bất cứ điều gì là quy tắc cho bối cảnh đứa trẻ sống). Tôi không vui mừng vì điều đó, và có lẽ muốn phân tách mối quan tâm tốt hơn giữa mô hình của trẻ và hành vi quan trọng, nhưng không thể giải thích mà không có nhiều bối cảnh hơn.

[biên tập:]

Vâng, hệ thống kết xuất là một trường hợp mà quyền sở hữu của phụ huynh ... tôi không muốn nói có ý nghĩa, nhưng đó là một trường hợp đã được thực hiện và không phải là ngày tận thế. Để tập trung kiểm soát, tôi vẫn thích thiết kế nơi trình xử lý đầu vào (hoặc bất cứ thứ gì) đi trên cây và biết bộ sưu tập nào sẽ được sắp xếp lại thay vì tìm thấy đứa trẻ, gọi một cái gì đó trên đó để biết đến cha mẹ của nó.


1
Đây là một câu trả lời tốt và có lẽ bạn nên xem xét tất cả các điểm được nêu ra và xem liệu chúng có áp dụng cho vấn đề của bạn không. Đã nói rằng mặc dù tôi không nghĩ rằng đó là ngày tận thế nếu bạn bắt đầu với tham chiếu như một cách thực hiện đơn giản và tái cấu trúc nó khi / nếu mọi thứ vượt quá tầm tay.
rperetti

Câu trả lời là đúng. Nhưng nếu liên kết con với cha mẹ là một ý tưởng tồi, thì lập trình hướng đối tượng không còn liên quan đến các đối tượng trong cuộc sống thực. Không có cách nào để làm điều này là một điều tốt?
Manoj R

Cảm ơn câu trả lời này cho đến nay. Tôi đã thêm nhiều ngữ cảnh trong câu hỏi ban đầu của mình.
Thraka

1
@ManojR - lập trình hướng đối tượng không bao giờ liên quan đến các đối tượng trong đời thực.
Telastyn

Chỉnh sửa của bạn khiến tôi nghĩ về VisualTreeHelper trong WPF \ Silverlight. Điều này cho phép bạn truy vấn về mối quan hệ của điều khiển hiện tại với phần còn lại của các điều khiển hệ thống UI. Tôi đoán rằng tôi có thể thực hiện một cái gì đó như thế này bởi vì tôi cũng có một điều khiển gốc sẽ lưu trữ mọi thứ khác. Cảm ơn!!
Thraka

0

Làm thế nào thực hiện đến điểm mà đứa trẻ quyết định nó muốn là quan trọng nhất? Nó đã đến đó thông qua cha mẹ? Nếu có, bạn có thể gửi tham chiếu cho cha mẹ đến phương thức đó.

ví dụ. nếu tất cả các nút có một số loại phương thức update () thực hiện một cái gì đó như

void update() {
    doSomething()
    for(Node n:childs){
        //do something
        n.update();
    }
}

bạn có thể thay đổi nó thành

void update(Node parent) {
    doSomething(parent)
    for(Node n:childs){
        //do something
        n.update(this);
    }
}

Vâng, đây là một cách tuyệt vời để làm điều đó. Tuy nhiên, trong tình huống của tôi, có thể mã logic máy khách không được khởi tạo bởi vòng lặp của cha mẹ.
Thraka

0

Tôi không nghĩ đó là một ý tưởng tồi. Bạn có thể giải quyết điều này bằng cách thêm một giá trị thứ tự sắp xếp cho mỗi đứa trẻ. Tôi đang hình dung một cái gì đó như "z-index" được sử dụng để hiển thị các đối tượng ontop-of hoặc đằng sau nhau trong các trang web.

Tôi không chắc làm thế nào bạn sẽ mã hóa một cái gì đó như thế này, nhưng khái niệm này có vẻ khả thi.


Với giải pháp này, vấn đề vẫn tồn tại mặc dù. Điều này chỉ thay thế khái niệm thứ tự trong mảng bằng chỉ mục z. Tôi vẫn sẽ phải có một hệ thống giao tiếp từ trẻ đến cha mẹ. Dù vậy cũng xin cảm ơn :)
Thraka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.