C# でイベント アーキテクチャを実装する際に少し問題があります。基本的なレイアウトは次のとおりです。
サーバーと通信するネットワーク層(dll)があります。このレイヤーは、データベース内の変更イベント用にいくつかのインターフェイスを作成しました。データベース フィールドが変更され、dll が適切なインターフェイスの実装を呼び出します。GUI があり、そのメイン メソッド内にデータ オブジェクトがあります。このデータ オブジェクトには、ユーザーが何かを変更するまで表示する一時データのリストが格納されます。変更があった場合は、変更をデータベースに送信します。
問題は、ネットワーク層内にイベントハンドラーを実装できないこと、またはそのインターフェイスの実装ができないことです。これは、データオブジェクト (イベントの結果を取得する必要があります) が GUI 内にのみ存在するためです。 main メソッドであり、適切なオブジェクトには認識されていません。
疑似コードとして例を作成します。
名前空間 ClientConnection { public class DataListener : IDataListener { パブリック デリゲート void SomethingReceivedHandler(オブジェクト送信者、SomethingData パケット); 公開イベントSomethingReceivedHandler somethingRecievedHandler; public void SomethingReceived(SomethingData パケット) { if (SomethingRecievedHandler != null) { 何か受信ハンドラー (この、パケット); } }
インターフェイスの現在の実装です。レイヤーには次のようなものがあります。
private void ProcessPacket(SomethingData パケット) { もし (パケット == ヌル) 戻る; 試す { if (パケットはSomethingData) DataListener.SomethingReceived(SomethingData としてのパケット); //をちょきちょきと切る
そして、私の主な方法は次のとおりです。
パブリック部分クラス Main : FormMain { データ ClientData; //GUI 内のすべての一時データが含まれます public frmMain() { ClientData = 新しいデータ(); DataListener dataListener = newDataListener(); InitializeComponent(); }
ClientData.SomeList.Add(packet)
そして、イベントが発生した場合は、コンテキストに応じて次のようなことをしたいと考えてい
ます。