1

この質問の抽象的な性質についてお詫び申し上げます (ビジネス上の理由で実際のコードを投稿することはできません) が、構造的に間違っていると思われるコードを継承したので、誰かにそれが間違っていることを確認してもらいたいと思います。私の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
    }
}

クエリは、中間クラスのメソッド内での親クラスの使用に関するものです。中間クラスがメソッドを使用できるように、すべての呼び出しに親を渡すのは奇妙だと思います。助言がありますか?

アップデート:

これを修正するために私たちが考えているのは、デリゲートを使用し、これらを下位クラスに設定して、メソッドが実行されるすべての領域で上位クラスを呼び出すことです。同様に、最上位クラスでアクセスされるプロパティは、単純なデリゲート メソッドを介して公開されます。私たちの考えでは、これにより循環的な所有権/参照が取り除かれ、オブジェクト間の双方向通信に置き換えられます。考え?

4

2 に答える 2

0

が実装するようなインターフェースを定義できます。これにより、中産階級はインターフェースを実装する何かが存在することを知ることができますが、それが何であるかを直接知ることはできません。IDoesWhatTopClassDoesTopClassTopClass

次に、毎回参照を渡す必要をなくすために、コンストラクターを介して渡されたインスタンスMiddleclassへのメンバー参照を保持できます。IDoesWhatTopClassDoes

于 2013-06-07T10:35:38.467 に答える
0

そのように子クラスにプロパティを作成します

public TopClass Parent {get;private set;}

次に、コンストラクターで設定します

public MiddleClass(TopClass parent)
{
    this.Parent = parent;
}

public TopClass()
{
   this.middleClass = new MiddleClass(this);
}

次に、常に渡すことなく、MiddleClass 内で Parent を使用することができます。

于 2013-06-07T10:20:50.710 に答える