この質問の抽象的な性質についてお詫び申し上げます (ビジネス上の理由で実際のコードを投稿することはできません) が、構造的に間違っていると思われるコードを継承したので、誰かにそれが間違っていることを確認してもらいたいと思います。私のOOスキルは本来あるべきものではないので、どうやってそれを正しくすることができるかについてのアドバイスは素晴らしいでしょう.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mynamespace
{
public class TopClass
{
private MiddleClass middleClass;
public TopClass()
{
this.middleClass = new MiddleClass();
}
public void SomeEventOccured()
{
BottomClass b = new BottomClass();
this.middleClass.NewBottomClass(this, b);
}
}
public class MiddleClass
{
private List<BottomClass> bottomClasses;
public void NewBottomClass(TopClass topClass, BottomClass newBottomClass)
{
// Need some functionality on TopClass here or use of it other properties.
// topClass.SomethingElse...
bottomClasses.Add(newBottomClass);
}
}
public class BottomClass
{
// Any old class structure
}
}
クエリは、中間クラスのメソッド内での親クラスの使用に関するものです。中間クラスがメソッドを使用できるように、すべての呼び出しに親を渡すのは奇妙だと思います。助言がありますか?
アップデート:
これを修正するために私たちが考えているのは、デリゲートを使用し、これらを下位クラスに設定して、メソッドが実行されるすべての領域で上位クラスを呼び出すことです。同様に、最上位クラスでアクセスされるプロパティは、単純なデリゲート メソッドを介して公開されます。私たちの考えでは、これにより循環的な所有権/参照が取り除かれ、オブジェクト間の双方向通信に置き換えられます。考え?