5

我有一个 MVC 分层应用程序,我对横切层有一些疑问。到目前为止,这一层有日志记录、DI、错误处理和缓存。

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

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

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

我应该将 Automapper 视为交叉关注点吗?到目前为止,我在 Presentation 层中设置了它,以便从 Entity 转换为 ViewModel 并将 ViewModel 转换为 Entity。正因为如此,我不得不添加一个我想避免的对 Model 的引用。

4

2 回答 2

2

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

1- A 与 B 有关系吗?我可以将它们归为 1 类(例如 CCC)吗?

2-是否有任何情况我需要在另一个项目中使用没有 B 的 A(反之亦然)?

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

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

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

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

于 2016-06-07T03:22:08.883 回答
1

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

于 2016-06-09T14:38:40.820 回答