gpt4 book ai didi

c# - 共享错误处理代码的设计模式

转载 作者:行者123 更新时间:2023-11-30 15:47:47 24 4
gpt4 key购买 nike

我正在寻找关于调用 API 中方法的代码层的体系结构的一些想法/意见。在我的例子中,调用代码是 C#/.NET,API 是非托管遗留 DLL 的一部分。但同样的问题可能适用于许多不同的语言/环境。

我基本上是在围绕非托管 API 编写托管包装器。包装器的存在是为了处理对非托管代码的编码(marshal)处理,并将较低级别的错误和异常转换为托管异常。

以下模式经常出现,即对于 API 中的每个函数:

public void CallMethodX(<params>)
{
try
{
API.MethodX(<params);
<common code for checking for error conditions in API; convert to exceptions and throw>
<common code for logging API call>
{
catch (SEHException xx)
{
<common code for querying API for more info on error and creating new managed exception>
}
}

另请注意:各种 API 方法可以有不同的签名。

基本问题是:人们推荐什么来抽象出用于日志记录和错误处理的通用代码。即使在最好的情况下,即通过将公共(public)代码移动到静态实用程序函数中,每个 API 方法调用也会有很多重复的样板代码。

我的一些想法包括:

  • 将公共(public)代码移动到接受实际方法委托(delegate)的实用程序类中,并将委托(delegate)注入(inject)到实用程序类中。实用程序类然后执行实际的异常处理和日志记录。 [工作正常,但创建/传递委托(delegate)变得有点笨拙/丑陋]。

  • 使用命令模式。 [会很好地工作,但似乎只是为了共享代码而增加了很多复杂性]

还有其他想法吗?在哪里放置通用异常处理代码的最佳 OO 实践?请注意,我不想将处理程序代码放在调用堆栈的更高位置,即将它与调用我的层的客户端一起定位——因为该层应该与查询 API 以获取详细错误信息和转换为托管异常的细节完全分离.

最佳答案

您可以查看的一个解决方案是 Aspect Oriented Programing .这就是 AOP 设计的问题类型。不幸的是,很多语言都不能很好地支持 AOP,但是如果你在谷歌上搜索 C# Aspect Oriented Programing,你会发现它是可行的,参见 Aspect Oriented Programming Using .Net

关于c# - 共享错误处理代码的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3194268/

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