我应该在 Asp.Net 核心 MVC 项目中的什么地方放置常用的实用程序方法?

Where should I put common utility methods in an Asp.Net Core MVC-project?

我目前在一个基本控制器中拥有所有常用的实用函数方法,我的所有控制器都继承自该基本控制器。这些是上传文件、调整图片大小、删除文件、发送电子邮件、生成随机密码、散列密码等功能的方法。

这类东西的推荐结构是什么?

在那种情况下,您不应该将所有这些实用功能都放在您的基本控制器中。如果您的项目增长,您将面临很多问题。这些方法的更改和测试可能会变得困难,所有继承的 classes 都需要使用相同的实用方法等。查看 Composition over inheritance 以了解另一种方法。

有时我倾向于按以下方式组织我的项目,如果这对您有帮助的话:

  • 简单的辅助方法:在您的 Web 项目中创建一个文件夹和一个命名空间(例如命名空间 [...].Common"),然后将一个或多个 public static classes inside (e.g. class "FileHelper.cs", "StringHelper.cs", etc). 如果你需要在控制器操作中使用这些方法之一,只需在顶部放置一个 "using ...Common" 语句您的控制器 class 并调用例如 FileHelper.MethodName.

  • 如果我可以用一组方法定义一个封闭的主题区域,我会尝试将这些方法封装在一个服务中 class(如果我有这样的感觉,甚至可能在 Web 项目之外)我可能在其他项目中也需要此功能),为该 class 定义一个接口,并通过使用依赖注入将该功能插入控制器 classes。如果您不知道这个概念,您一定要阅读 Dependency injection in ASP.NET Core。依赖注入是 ASP.NET 核心项目中广泛使用的主要概念,可为您带来很多优势,并且 - 如果使用得当 - 可以将您的工作融入组织良好的项目中。

  • 根据您的需要,总是可以使用更复杂的组织。如果您的项目增长,请查看多层、六边形或洋葱架构。