我正在尝试为用户可以登录,更改密码和电子邮件等的系统实施基本审核。

我要审核的功能全部在业务层中,我想创建一个Audit对象,该对象存储调用该功能的日期时间(包括结果)。

我最近参加了一个会议,其中一个会议是关于精心设计的Web应用程序,我正在尝试实现一些想法。基本上,我使用Enum返回函数的结果,并使用switch语句更新该层中的UI。这些函数使用提前返回,这样就不会浪费时间来创建,设置和保存审核。

我的问题是,在审核业务功能时,其他人会采取什么方法?如果您拥有像我这样的功能,您会采取什么方法(如果您说沟渠,我会听,但会脾气暴躁)。

该代码看起来像这样:

function Login(string username, string password)
{
 User user = repo.getUser(username, password);

 if (user.failLogic1) { return failLogic1Enum; }
 if (user.failLogic2) { return failLogic2Enum; }
 if (user.failLogic3) { return failLogic3Enum; }
 if (user.failLogic4) { return failLogic4Enum; }

 user.AddAudit(new (Audit(AuditTypeEnum LoginSuccess));
 user.Save();

 return successEnum;
}


我可以扩展if语句,以在每个语句中创建一个新的审核,但随后该函数开始变得混乱。我可以在switch语句的UI层中进行审核,但这似乎是错误的。

将所有内容都粘在一个finally上尝试并使用final创建Audit对象并在其中设置其信息从而解决提早退货问题,真的很不好吗?我的印象是,最后是为了清理而不是审核。

我叫David,我只是想成为一个更好的代码。谢谢。

最佳答案

我不能说我用过它,但这似乎是Aspect Oriented Programming的候选人。基本上,您可以以自动化的方式在每个方法调用中注入代码,以记录日志/审计/等内容。

另外,制作try / catch / finally块也不理想,但是我会花费成本/收益来看看是否值得。如果可以合理地廉价地重构代码,而不必使用它,则可以这样做。如果成本过高,我会尝试一下。我认为很多人都陷入了“最佳解决方案”中,但是时间/金钱始终是制约因素,因此“有意义”的事情也是如此。

关于c# - 如何在业务层中实现审核,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6535594/

10-12 12:49
查看更多