我应该在 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 核心项目中广泛使用的主要概念,可为您带来很多优势,并且 - 如果使用得当 - 可以将您的工作融入组织良好的项目中。
根据您的需要,总是可以使用更复杂的组织。如果您的项目增长,请查看多层、六边形或洋葱架构。
我目前在一个基本控制器中拥有所有常用的实用函数方法,我的所有控制器都继承自该基本控制器。这些是上传文件、调整图片大小、删除文件、发送电子邮件、生成随机密码、散列密码等功能的方法。
这类东西的推荐结构是什么?
在那种情况下,您不应该将所有这些实用功能都放在您的基本控制器中。如果您的项目增长,您将面临很多问题。这些方法的更改和测试可能会变得困难,所有继承的 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 核心项目中广泛使用的主要概念,可为您带来很多优势,并且 - 如果使用得当 - 可以将您的工作融入组织良好的项目中。
根据您的需要,总是可以使用更复杂的组织。如果您的项目增长,请查看多层、六边形或洋葱架构。