gpt4 book ai didi

c# - 我是否开始使用 C# 错误实践路径,为事件日志创建单独的类?

转载 作者:太空狗 更新时间:2023-10-30 00:58:11 28 4
gpt4 key购买 nike

我有一个网络应用程序,其中包含用户执行的操作的事件日志。可以记录多种类型的事件。

这是一个例子:

public static class NewAccountActivity() {
public static Write(string username) {
//... do stuff to enter a new account activity into the database ...
}
}
public static class NewPostActivity() {
public static Write(string username, long postId, string postTitle) {
//... do stuff to enter a new post activity entry into the database ...
}
}

然后继续为要记录的每种类型的事件创建一个新类。每个事件都有一个 .Write() 方法,每个事件都有一个唯一的签名(如上面的代码示例所示)

然后在我的网络应用程序(基于 asp.net mvc)中我这样使用它们:

public ActionResult NewAccount(Account account) {
if (Model.IsValid(account)) {
//... do new account stuff ...

NewAccountActivity.Write(account.UserName);

//... redirect to action, or show view ...
}
}

public ActionResult NewPost(Post post) {
if (Model.IsValid(post)) {
//... do new post stuff ...

NewPostActivity.Write(post.UserName, post.postId, post.Title);

//... redirect to action, or show view ...
}
}

这是个坏主意吗?有没有更好的办法?这些应该是一堆方法塞进一个类吗?

我开始这样做是因为 an answer to a different question I had on SO .

最佳答案

这是我的建议。

首先,静态类不应该代表一个事件。 Logger 类可以是静态的,也可以通过 DI container 访问。 .

为事件创建一个接口(interface),即具有单个WriteLog 方法的IActivity。对于处理量超过一行代码的每个事件,创建一个实现 IActivity 接口(interface)的类。

现在对于所有其他简单的事件日志,创建一个接受 function lambda 的默认事件.

例如,在这段代码中,我假设每个事件都构建一个字符串并通过Log 函数返回它:

public class NewAccountActivity : IActivity
{
private string userName;

public NewAccountActivity(string userName)
{
this.userName = userName;
}

public string Log()
{
return this.UserName;
}
}

public class ActivityEntry : IActivity
{
private Func<string> action;

public ActivityEntry(Func<string> action)
{
this.action = action;
}

public string Log()
{
return this.action();
}
}

现在在您的静态 Logger 类中,创建两个函数:

public static class Logger
{
public static void Write(IActivity activity)
{
// Ask activity for its data and write it down to a log file
WriteToFile(activity.Log());
}

public static void Write(Func<string> action)
{
Write(new ActivityEntry(action));
}
}

然后在您的代码中,像这样调用您的记录器类:

Logger.Write(new NewAccountActivity(currentUserName));

或者如果您需要记录其他简单的内容:

Logger.Write(() => "Hello world");

最后一次调用将创建一个新的 ActivityEntry 实例,它将记录“Hello World”。

关于c# - 我是否开始使用 C# 错误实践路径,为事件日志创建单独的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3420475/

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