- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找可以实现一些序言代码和结尾代码的设计模式。让我解释一下:
我有一个函数(其中有很多)几乎做同样的事情:
这是伪代码,但实际上它是用 C# 4.5 编写的
public IDatabaseError GetUserByName(string Name)
{
try
{
//Initialize session to database
}
catch (Exception)
{
// return error with description for this step
}
try
{
// Try to create 'transaction' object
}
catch(Exception)
{
// return error with description about this step
}
try
{
// Execute call to database with session and transaction object
//
// Actually in all function only this section of the code is different
//
}
catch(Exception)
{
// Transaction object rollback
// Return error with description for this step
}
finally
{
// Close session to database
}
return everything-is-ok
}
因此 - 如您所见,“prolog”(创建 session 、事务、其他辅助函数)和“epilog”(关闭 session 、回滚事务、清理内存等)对于所有 功能。
一些限制:
我想将 session 和事务对象的创建/销毁过程保持在函数中,而不是在 ctor 中
自定义代码(在中间运行的代码)必须包裹在 try/catch 中,并针对不同的情况返回不同的错误
我愿意接受任何 Func<>、Action<> 更可取的 Task<> 函数建议
对设计模式或代码重构有什么想法吗?
最佳答案
这可以通过使用 IDisposable 对象来实现,例如:
using(var uow = new UnitOfWork() )
using(var t = new TransactionScope() )
{
//query the database and throws exceptions
// in case of errors
}
请不要TransactionScope class 是您在 System.Transaction 中拥有的开箱即用的类,它可以(不仅)与数据库连接一起工作。在 UnitOfWork constructor
中执行“Prologue”代码(即打开连接...),在 Dispose
中执行结尾部分。通过在发生错误时抛出异常,您可以确定结尾部分无论如何都会被调用。
关于c# - 带有 prolog 和 epilog 的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011275/
我定义了一个带有描述、选项和结尾的解析器。当我使用 --help 运行应用程序时,它会按预期输出关于 epilog 的帮助。但是,如果 --help 与 --verbose 一起出现,我只想查看结语。
是否可以使用 Visual Studio 编译器编写 2 个在调用其他函数之前和函数执行之后被调用的函数?在 gcc 中,你可以用 __cyg_profile_func_*() 做到这一点职能: vo
我正在寻找可以实现一些序言代码和结尾代码的设计模式。让我解释一下: 我有一个函数(其中有很多)几乎做同样的事情: 这是伪代码,但实际上它是用 C# 4.5 编写的 public IDatabaseEr
我正在寻找可以实现一些序言代码和结尾代码的设计模式。让我解释一下: 我有一个函数(其中有很多)几乎做同样的事情: 这是伪代码,但实际上它是用 C# 4.5 编写的 public IDatabaseEr
我有一个场景,我有很多具有以下模式的函数 RETURN_TYPE FOO( TYPE PARM1, TYPE PARM2) { PROLOG(PARM1, PARM2)
我想展开一个 x64 调用堆栈,所以我尝试按照我在此处找到的“UNWIND 过程”进行操作: http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
我注意到,有时当我编译 C 代码时,有时会在方法 1 中生成汇编代码: STR R11, [SP, #-4]! ADD R11, SP, #0 SUB SP, SP, #4 有时在方法 2 中: ST
我正在一个 dll 中编写一些插件代码,该代码由我无法控制的主机调用。 主机假定插件作为 __stdcall 函数导出。主机被告知函数的名称和它期望的参数的详细信息,并通过 LoadLibrary、G
我正在尝试写入 XML 文档,从列表的 ArrayList 中获取数据 for (int i = 0; i )[i]; headname.Replace
我是一名优秀的程序员,十分优秀!