需要记录一些“高风险”数据操作。在这种情况下,“高风险”操作被定义为写入我们的ERP系统。碰巧我们正在将这些事件记录到SQL Server数据库中。
伪代码:
Public Class MyCompany.DAL.ERP {
Public void WriteToERP(string msg) {
// ... do the write
MyCompany.Logging.Write("Wrote msg: " + msg);
}
}
Public Class MyCompany.Logging {
Public void Write(string msg) {
MyCompany.DAL.ExecuteSQL("Insert INTO EventLog VALUES " + msg);
}
}消除这种紧密耦合的最佳实践是什么?
发布于 2009-01-20 19:19:09
嗯,IMHO日志是一个基础设施问题。你可以在你的DAL中使用它,但是你的记录器不应该使用你的DAL。
如果您删除了记录器对DAL的依赖,那么您也应该能够在其他项目中使用记录器。
发布于 2009-01-20 19:20:34
您可以创建自定义TraceListener (System.Diagnostics)以插入到公司的SQL Server数据库中。然后在应用程序代码中使用TraceSource / Trace (System.Diagnostics)进行日志记录。然后,您可以在设计时使用标准.NET配置来使用自定义TraceListener。这样,如果您需要更改事件日志记录,只需更改TraceListener即可。此外,您还可以在其他应用程序中重用TraceListener。
您还可以使用Enterprise Library的日志记录应用程序块和许多其他第三方日志记录解决方案。
发布于 2009-01-20 19:18:27
也许你可以让你的日志组件,移动到一个单独的程序集(我假设这是C#代码),引发一个事件,调用者可以在调用Logging.Write()之前注册。在Logging.Write()返回之后,从事件中注销。在事件处理程序中,您可以执行MyCompany.DAL.ExecuteSQL("Insert INTO EventLog VALUES“+ msg)调用。
https://stackoverflow.com/questions/462656
复制相似问题