C# 程序架构问题
我有几个关于程序架构/设计的问题。C# 程序架构问题,c#,architecture,windows-services,C#,Architecture,Windows Services,我有几个关于程序架构/设计的问题。 1.我正在完全重构我的一个程序,该程序的目的是将文件从客户端传输到服务器端(如drop box或cyber ark)。它可以根据配置创建多个客户端,所有客户端都在窗口服务下。 让我们看一下开始代码: public class Master { private List<Box> _boxes = new List<Box>(); public Master() { Initialize(); ... }
1.我正在完全重构我的一个程序,该程序的目的是将文件从客户端传输到服务器端(如drop box或cyber ark)。它可以根据配置创建多个客户端,所有客户端都在窗口服务下。 让我们看一下开始代码:
public class Master
{
private List<Box> _boxes = new List<Box>();
public Master()
{
Initialize(); ...
}
public void Run()
{
foreach(var box in _boxes)
{
box.Run();
}
}
}
公共类主控
{
私有列表_box=新列表();
公共硕士()
{
初始化()。。。
}
公开募捐
{
foreach(变量框中的变量框)
{
box.Run();
}
}
}
每个Box类都是靠自己“生存”的,但如果其中一个类因非托管异常而失败,则整个服务将丢失,或者通过更好地管理资源而丢失。我的想法是,窗口服务是主类,它将启动一个不同的进程
,或者使用appDomain
类
你们中是否有人也看不到Google chrome浏览器中的箭头和StackExchange链接?为什么不处理任何异常
public void Run()
{
foreach(var box in _boxes)
{
try { box.Run(); }
catch(Exception ex){ /* handle exception */ }
}
}
我在这里看到两个基本决定 首先,是否存在需要重新启动整个运行过程的机箱故障模式 那么,如果存在这样的故障模式,我们是否可以通过将盒子分离到它们自己的流程空间来限制故障模式的影响?也就是说,我们是否应该增加隔离,以提高整体稳定性 隔离原则非常常用,例如在Java EE应用服务器中,我们可能会故意选择将某些应用程序与其他应用程序隔离,因为某些应用程序是不稳定的-不稳定的JNI代码往往会破坏整个过程 我认为这种隔离通常是必要的,因为我们有理由不相信某些代码。现在,在您编写的示例中,是否真的不可能捕获所有异常并处理它们?即使一个盒子需要停止,我们能不能抓住问题并开始一个新的实例
因此,我将尝试强化我的Box类,以便不需要隔离。您不能在
foreach
中使用singletry/catch
,因为调用Box.Run()
时,您正在Box
类中运行线程,但是,您应该预测框
类中的异常并在那里处理它们,但是如果无法做到这一点,“可能是因为您调用了另一个本身运行某些线程的第三方库,这可能会导致异常”,那么,您是否可以选择在不同的应用程序域中创建和运行每个框?举例说明如何操作,通过这样做,您可以通过处理每个框的应用程序域异常来分别处理每个框异常:
myBoxDomain.UnhandledException += OnCurrentDomain_UnhandledException;
因此,您可以在这里处理每个盒子故障,而不会影响其他盒子 若要询问有关该网站的问题,请在Meta上发布您的p.S。这不属于“加油”这个问题吗?如果我听说过的话,现在有一个弗洛伊德式的错误:)当
Box.Run()
时,你是否在Box
类中运行任何线程?“refutoring”-很抱歉:)Box是一个不同的线程监视器创建文件的文件夹为什么这里不建议隔离?每个框都在监视不同的文件夹,它们有不同的队列和线程。因为(在我对您的情况了解有限的情况下)似乎是为了适应错误代码而做出的让步。流程越多,使用的资源越多,解决方案越复杂。