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)
そして、イベントが発生した場合は、コンテキストに応じて次のようなことをしたいと考えてい
ます。