gpt4 book ai didi

design-patterns - Windows服务和设计模式

转载 作者:行者123 更新时间:2023-12-02 21:37:22 25 4
gpt4 key购买 nike

我有一个 Windows 服务来执行后台进程。此 Windows 服务将与 asp.net 网站交互。功能如下。

在我的网站上有 3 个 Action 。用户可以选择任务(假设有三个按钮)。然后它会调用windows服务。其余操作由 Windows 服务执行。用户可以从网站注销,但它会在后台运行该服务。一旦完成,它将在数据库中进行相应的更改。我需要知道我是否可以将任何设计模式应用于 Windows 服务(工厂、抽象工厂等)。我读过不同的设计模式,但我真的很困惑如何将其应用于项目。目前,我正在编写 Windows 服务的“OnStart”和“OnStop”事件中的整个代码。请指导我。

谢谢。

最佳答案

我唯一一次安装多个服务实例是针对多个环境,例如开发、测试和生产。否则,它应该保留在同一个服务中,假设所有代码在逻辑上都是相关的。

至于设计模式,我创建的大多数服务都遵循一个简单的“模式”。我鼓励回答,因为我自己不知道这是否是一个好的模式。它基本上涉及创建一个立即启动的主线程,以及基于需要完成的工作的子线程。对于您的情况,以下可能是用户处理器的简单服务布局。

服务类:

public partial class Service : ServiceBase
{
private Processor _processor;

public Service() { InitializeComponent(); }

protected override void OnStart(string[] args)
{
_processor = new Processor();
new System.Threading.Thread(_processor.Run).Start();
}

protected override void OnStop()
{
_processor.Stop();
}
}

处理器:

public class Processor
{
private bool _continue;
private List<UserProcessor> _userProcessors; // List of users being processed.

public void Run()
{
_continue = true;
while (_continue)
{
var users = getUsersToProcess();
foreach (User user in users)
{
if (_userProcessors.Any(u => u.UserId == user.UserId) == false)
{
// Start a new processor for the user since it wasn't found.
var processor = new UserProcessor(user);
new System.Threading.Thread(processor.Run).Start();
_userProcessors.Add(processor);
}
}

System.Threading.Thread.Sleep(1000);
}
}

public void Stop()
{
_continue = false;

foreach (var processer in _userProcessors)
processer.Stop();
}

private List<User> getUsersToProcess() { throw new NotImplementedException(); }
}

当然,UserProcessor 的设置几乎与 Processor 相同,但 while 循环内的代码不同。这是您进行数据库交互的地方,但我会让您弄清楚这部分。

关于design-patterns - Windows服务和设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21083670/

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