横切层 |自动映射器 |依赖注入

Cross Cutting Layer | Automapper | Dependency Injection

我有一个 MVC 分层应用程序,我对横切层有一些疑问。目前这一层有Logging、DI、Error Handling和Cache。

我创建了一个项目并将所有这些功能按文件夹分开。这个可以吗?或者我应该为每个功能创建一个项目?

因为我在这个项目中设置了 Autofac(DI 文件夹),所以我必须添加对其他项目的引用:模型、存储库和服务。可以将这些引用添加到 Cross Cutting 项目吗?

我应该创建一个单独的项目来对通用功能进行分组吗?例如枚举、常量和方法,如 GetMd5Hash。或者我应该为此使用 Cross Cutting 项目吗?

我应该将 Automapper 视为一个横切关注点吗?到目前为止,我在表示层中设置了它,以从 Entity 转换为 ViewModel,并将 ViewModel 转换为 Entity。因此,我不得不添加对我想避免的模型的引用。

通常,您会在整个应用程序中使用横切关注点 (CCC) 帮助器。这些助手可以在单个或不同的项目中定义。在决定我的库的粒度之前,我个人会问自己这两个问题:

1- A 是否与 B 相关?我可以将它们归为 1 个类别(例如 CCC)吗?

2- 在任何情况下我都需要在另一个项目中使用 A 而不使用 B(反之亦然)吗?

如果第一个问题的答案是肯定的,而第二个问题的答案是否定的,那么将它们放在同一个 library/package 中。当你想把东西放在不同的项目上时,一定要考虑可重用性。

这些助手不应该引用您的主要项目,因为它们只是助手和实用程序,应该与业务逻辑和业务领域无关。

在您的主要项目(MVC 应用程序或业务逻辑层的库)中,您将在整个过程中使用这些助手 code.Or您将使用面向方面 (AOP) 的库将它们注入您的代码。

我不会将 DI 和自动映射器之类的东西视为横切问题。日志记录、审计、身份验证、授权和缓存是 CCC 的好例子。但是像 DI 和 Automapper 这样的东西是你用来实现你的架构模式和设计的东西,所以它们是不同的。并且没有必要创建新的库或助手来将它们应用到您的项目中。

不客气,是的,您可以这样做,但是将它们放在一个单独的项目中有什么意义呢?你想在不同的项目中重用它们吗?如果是这样,请为他们创建项目。