2

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

这类事物的推荐结构是什么?

4

1 回答 1

1

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

如果这可能对您有所帮助,我倾向于以以下方式组织我的项目:

  • 简单的辅助方法:在您的 Web 项目中创建一个文件夹和一个命名空间(例如命名空间 [...].Common"),并在其中放置一个或多个公共静态类(例如类“FileHelper.cs”、“StringHelper.cs”等)如果您在控制器操作中需要这些方法之一,只需在控制器类的顶部放置“使用 ...Common”语句并调用例如 FileHelper.MethodName。

  • 如果我可以用一组方法定义一个封闭的主题区域,我会尝试将这些方法封装在一个服务类中(如果我觉得我可能在其他项目中也需要这个功能,甚至可能在 Web 项目之外),定义一个接口对于该类,并通过使用依赖注入将该功能插入到控制器类中。如果您不了解该概念,则绝对应该阅读ASP.NET Core 中的依赖注入。依赖注入是 ASP.NET Core 项目中广泛使用的主要概念,它为您带来许多优势,并且 - 如果使用得当 - 将您的工作引导到组织良好的项目中。

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

于 2020-01-08T18:49:27.217 回答