gpt4 book ai didi

event-driven-design - 对于 Windows 服务,这是一种不错的事件驱动方法吗?

转载 作者:行者123 更新时间:2023-12-04 08:19:02 24 4
gpt4 key购买 nike

我正在阅读有关事件驱动设计的内容。在实践中,我很难理解其中的一些内容。我正在考虑将其用于监视、解析和处理来自第 3 方 TCP 流的信息的 Windows 服务。以下是一种不错的方法,还是我遗漏了什么?

我的计划是让主要服务成为事件的容器:

public class MyService
{

public void RegisterAgent(ServiceAgent agent)
{
Log("Initializing agent " + agent);
agent.Initialize(this);
Log("Done intializing agent " + agent);
}

public void Log(string messageText)
{
OnSimpleLogEventLogged(this, new SimpleLogEventArgs(messageText));
}

protected void Raise<T>(EventHandler<T> eventHandler, object sender, T args) where T : EventArgs
{
var handler = eventHandler;
if (handler == null) return;
handler(sender, args);

}

public event EventHandler<SimpleLogEventArgs> SimpleLogEventLogged;
protected void OnSimpleLogEventLogged(object sender, SimpleLogEventArgs args)
{
Raise(SimpleLogEventLogged, sender, args);
}

public event EventHandler<TextRecievedEventArgs > TextRecieved;
public void OnTextRecieved(object sender, TextRecievedEventArgs args)
{
Raise(TextRecieved, sender, args);
}

public event EventHandler<TextParsedEventArgs> TextParsed;
public void OnTextParsed(object sender, TextParsedEventArgs args)
{
Raise(TextParsed, sender, args);
}

...
}

然后,使用 MEF 或类似工具,我将注册“ServiceAgent”实例,这些实例仅处理和/或引发事件,可选择在后台线程上执行此操作。例如:

public class TextParsingAgent : ServiceAgent
{

public override void Initialize(MyService service)
{
service.TextRecieved += TextRecieved;
base.Initialize(service);
}

void TextRecieved(object sender, TextRecievedEventArgs e)
{
ThreadPool.QueueUserWorkItem(TextRecievedAsync, e);
}

private void TextRecieved(object state)
{
var e = (TextRecievedEventArgs)state;
//TODO:Parse text into something meaningful and store in textParseEventArgs
service.OnTextParsed(textParseEventArgs);
}
}

最佳答案

我个人认为这是一个相当不错的代码整体结构,它很容易将逻辑单元分离到它们自己的操作中,并且通过服务外通知,如果您需要设置不同的服务代理,它可以让您在将来具有良好的可扩展性稍后。

关于event-driven-design - 对于 Windows 服务,这是一种不错的事件驱动方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com