0

TruckStop には List(of TruckClass) と Weigh() というメソッドがあります。TruckClass は Weigh() を呼び出す必要があります。次の 2 つの設計の長所と短所は何ですか? TruckStopClass への参照を持ち、MyTruckStopClassReference.Weigh() を呼び出す TruckClass 対。TruckStopClass によって処理される TruckClass.Weigh イベントを発生させる TruckClass。

相互に参照するオブジェクトは GC に影響しないことを読みましたが、各 TruckClass で追加の参照が必要になります。コインの反対側では、イベントハンドラーも参照であり、配線を解除しないと問題が発生する可能性があることを読みました。この問題に関する長所/短所/ベストプラクティス/意見について、少し明確にしたり解説したりしていただければ幸いです。

4

2 に答える 2

0

2 つのアプローチに関する限り、私は 2 つのクラスが個別であり、イベント/ハンドラーによって結び付けられていないことに傾倒する傾向があります。この理論的なケースでは、モジュール内またはトラック ストップ クラスの共有関数内に重量関数を配置し、トラックをパラメータとして取得します。

イベントルートに行く場合、別のクラスで発生したイベントを1つのクラスで処理することは、物事を行うための非常に好ましい方法ではありません。そして、私の個人的な意見では、これを行った場合、2 つのクラスが非常に緊密に結合され、少なくとも OOP 設計を解体しているように感じるので、非常に汚いと感じるでしょう。

複数の場所から同じフォームを呼び出すことができるプログラムを扱うときに、フォームの初期化を統合するために私が過去に行ったことは、フォームを起動できるすべての可能な場所に、共通のコンテナーへのイベントを発生させることです。コンテナー クラスまたはそれらの線に沿った何か、そしてその親フォーム/クラス/コンテナーで、すべての子からの各イベントを処理します。これの良いところは、フォーム初期化子を呼び出す 1 つのサブプロシージャ (または定義したい関数) ですべてのイベントを処理できることです。一箇所。

この例はあなたの例と厳密には関係ありませんが、例を少し変更して、2 つのクラスの両方で一部の車両の重量を量る可能性があると言うと、トラックストップの重量関数へのアクセス ポイントを集中化することで、プロジェクトの管理がはるかに簡単になります。 .

于 2013-01-09T21:18:56.697 に答える
-1

私の解決策は、TruckStop クラスに TruckClass と Weigh() メソッドの両方を含めることです。何かのようなもの:

Class TruckStop
    Class Truck
        (private attributes)
        (public properties)
    End Class

    Public Shared Function Weigh(truck) as Weight
        (code)
    End Function
End Class

次のように参照します。

weight = thisTruckStop.weigh(thisTruckStop.Truck(truckNum))
于 2013-01-09T20:32:40.693 に答える