所以我今天想知道,您会将实用程序类放在ASP.NET MVC应用程序的什么位置?实用程序类是指可以静态的类,仅用于执行功能。就像一个类,以电子邮件地址,主题和正文作为参数来发送电子邮件。
我认为也许创建一个单独的文件夹和名称空间就足够了,但是我想让所有人都同意
所以我今天想知道,您会将实用程序类放在ASP.NET MVC应用程序的什么位置?实用程序类是指可以静态的类,仅用于执行功能。就像一个类,以电子邮件地址,主题和正文作为参数来发送电子邮件。
我认为也许创建一个单独的文件夹和名称空间就足够了,但是我想让所有人都同意
Answers:
你不知道 您自己的示例是一个完美的例子,可以说明为什么不这样做。
您想发送电子邮件,对不对?所以,你创建的某处一个静态类CommunicationUtilities
有一个静态SendEmail()
的了。您可以从某类的类中使用此方法,该类可以完成很多工作,例如,重置用户密码并通过电子邮件向其发送新密码。完善。
现在,如果您想对课程进行单元测试会怎样?您不能这样做,因为每次您要测试重置密码的方法时,它都会更改数据库(不适用于单元测试),并且还会发送电子邮件(更糟糕的是)。
您可能已经阅读了有关Inversion of Control的知识,它具有使单元测试更容易的好处。有关IoC的文章将向您说明,而不是像这样:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
你做:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
允许使用模拟和存根。
尝试对您的应用IoC CommunicationUtilities
。是的,你不能。这就是为什么它坏了。
先前给出的答案均未解决实际问题。user60812只是问,将实用程序类放在MVC项目中的什么位置。每个人都惊叹于单个例子,并抱怨除了眼前的问题以外的所有事情。
@ user60812,根据您想要的抽象级别,我将:
恕我直言
不要为实用程序创建静态类。在大多数情况下,静电是有害的。也不要称他们为经理。无论您正在做什么,都应将其放在逻辑名称空间中。
例如:
namespace Application.Notifications.Email
{
public interface ISendEmailCommand
{
void Execute(Email email);
}
}
电子邮件地址,主题和正文是一个单独的问题,因此我将为此使用类结构,因此为什么Email email
在上面的示例中使用了电子邮件。