Çocuk-Ebeveyn bağlantısı - kötü fikir?


15

Ebeveynimin çocuk olduğunu bildiği bir durumum var (duh) ama çocuğun ebeveyne başvurabilmesini istiyorum. Bunun nedeni, çocuğun kendisini hissettirdiğinde kendisini en önemli veya en az önemli olarak tanımlama yeteneğine sahip olmasını istememdir. Çocuk bunu yaptığında, ebeveynin çocuklarının üstüne veya altına taşır.

Geçmişte, çocuğa bir ebeveyne geri dönmek için WeakReference özelliğini kullandım, ancak can sıkıcı bir yük eklediğini hissediyorum, ancak belki de bunu yapmanın en iyi yolu.

Bu sadece kötü bir fikir mi? Bu yeteneği nasıl farklı uygularsınız?

Güncelleme 1: Daha fazla bağlam ekleme. Bu bir oluşturma sistemidir, bu nedenle üst kap birlikte gruplanan pencerelerin listesidir. "Ben en önemlisim!" Yazan alt öğe (pencere). temelde pencerelerin geri kalanının üst kısmında işlenmek istiyor.

Ebeveyn, bu çocukları birlikte gruplandırmak için sadece mantıklı bir kaptır. En üstte olma isteğini bildirmek için bir etkinlik eklemenin iyi bir fikir olduğunu görebiliyorum. Ancak uygulama (çocuğun ebeveynle ne yapmak istediği) bir yana, neden çocuk-> ebeveyn bağlantı kurmasını istemezsiniz? Şüpheli bağlantılı listeler bunu yapar, böylece insanlar bir şeye gidip gelebilirler.


3
İhtiyacınız yok WeakReference. Net çöp toplayıcı döngüleri idare edebilir. Çocuk artık kullanımda değilse (ebeveyn bunu işaret etmiyorsa), ebeveynine bir referans içermesine rağmen toplanacaktır.
dbkk

İki çocuk da en önemli çocuk olmak istediklerini düşünürse ne olur?
btilly

@btilly En önemli çocuk aslında ebeveynin alt listesindeki yığının en üstüne yeniden sıralar. Öyleyse kim sürüyor, en önemlisi. Senaryomda, asla en önemli çatışmaya sahip olamazsınız.
Thraka

Yanıtlar:


18

Bu sadece kötü bir fikir mi?

Sıklıkla.

  • Ebeveynin kapsüllenmesini bozar.
  • Her ikisinde de kuplajı arttırır.
  • Çocuğun sistemin geri kalanına girmesi için bir kırılma noktası görevi görür ve yakınında belirsiz bir şeyle bağlantıyı arttırır (çünkü insanlar bu referansı kötüye kullanacaktır )
  • Ebeveynleri olmayan çocuklar istiyorsanız, tasarımınızı sınırlar.

Nasıl daha iyi? Çocuk bir koleksiyonda olduğunu bilmemeli veya önemsememelidir. Kendisini önemli saymak yerine, bildiği bir olayın kimin umurunda (ebeveyn) önceliğini artırabileceğini (ya da çocuğun yaşadığı bağlam için kuralların ne olduğunu) işaret etmelidir. Bundan heyecan duymuyorum ve belki de çocuğun modeli ve önem davranışı arasındaki kaygıların daha iyi ayrılmasını tercih ederim, ancak daha fazla bağlam olmadan ayrıntılı bir şekilde detaylandırılamaz.

[Düzenle:]

Evet, render sistemleri ebeveyn sahipliğinin olduğu bir durumdur ... demek istediğim mantıklı değil, ama bunun yapıldığı ve dünyanın sonu olmayan bir durum. Bir kontrol odağı vermek için, giriş işleyicisinin (ya da her neyse) ağacı yürüdüğü ve çocuğu bulmaktan ziyade hangi koleksiyonun yeniden sıralanacağını bildiği, üzerine ebeveynine gitmeyi bilen bir şey çağıran tasarımı tercih ederim.


1
Bu iyi bir cevaptır ve muhtemelen onun öne sürdüğü tüm noktaları göz önünde bulundurmalı ve probleminiz için geçerli olup olmadığını görmelisiniz. Basit bir uygulama olarak referansla başlar ve işler ne zaman kontrolden çıkarsa bunu yeniden düzenlerseniz, bunun dünyanın sonu olmadığını düşünmeme rağmen.
rperetti

Cevap doğru. Ancak, çocuk-ebeveyn bağlantısı kötü bir fikirse, nesne yönelimli programlama artık gerçek hayattaki nesnelerle ilişkili değildir. Bunu iyi bir şey yapmanın bir yolu yok mu?
Manoj R

Şimdiye kadar bu cevap için teşekkürler. Orijinal soruma daha fazla bağlam ekledim.
Thraka

1
@ManojR - nesne yönelimli programlama asla gerçek hayattaki nesnelerle ilgili değildi.
Telastyn

Yaptığınız düzenleme beni WPF \ Silverlight'taki VisualTreeHelper hakkında düşündürüyor. Bu, mevcut kontrolün UI sistemleri kontrollerinin geri kalanıyla ilişkisi hakkında sorgulama yapmanıza izin verdi. Sanırım böyle bir şey uygulayabilirim çünkü her şeyi barındıracak bir kök kontrolüm var. Teşekkürler!!
Thraka

0

İcra, çocuğun en önemli olmak istediğine karar verdiği noktaya nasıl geldi? Oraya ebeveyn aracılığıyla mı ulaştı? Evetse, bu yönteme üst öğeye başvuru gönderebilirsiniz.

Örneğin. tüm düğümlerde böyle bir şey yapan bir tür update () yöntemi varsa

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

değiştirebilirsin

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

Evet, bunu yapmanın harika bir yolu. Ancak, benim durumumda, istemci mantık kodu üst döngü tarafından başlatılmamış olabilir.
Thraka

0

Bunun kötü bir fikir olduğunu sanmıyorum. Bunu, her çocuğa bir sıralama düzeni değeri ekleyerek çözebilirsiniz. Web sayfalarında birbirinin üstünde veya arkasında nesneleri görüntülemek için kullanılan "z-endeksi" gibi bir şey öngörüyorum.

Böyle bir şeyi nasıl kodlayacağınızdan emin değilim, ancak konsept uygulanabilir görünüyor.


Bu çözüm ile sorun yine de var. Bu yalnızca dizi sırası konseptini z-endeksi ile değiştirir. Yine de çocuk-ebeveyn arasında bir iletişim sistemine sahip olmalıydım. Thanks though :)
Thraka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.