Yur*_*oso 5 c# architecture model-view-controller cross-cutting-concerns automapper
我有一个 MVC 分层应用程序,我对横切层有一些疑问。到目前为止,这一层有日志记录、DI、错误处理和缓存。
我创建了一个项目并将所有这些功能按文件夹分开。这个可以吗?还是应该为每个功能创建一个项目?
因为我在这个项目中设置了 Autofac(DI 文件夹),所以我必须添加对其他项目的引用:模型、存储库和服务。可以将这些引用添加到 Cross Cutting 项目吗?
我应该创建一个单独的项目来对通用功能进行分组吗?例如枚举、常量和 GetMd5Hash 等方法。或者我应该为此使用交叉切割项目?
我应该将 Automapper 视为跨领域关注点吗?到目前为止,我在Presentation 层设置了它,从Entity 转换为ViewModel,将ViewModel 转换为Entity。因此,我不得不添加对 Model 的引用,这是我想避免的。
通常,您有在整个应用程序中使用的横切关注点 (CCC) 帮助程序。这些助手可以在单个或不同的项目中定义。在决定我的库的粒度之前,我个人会问自己以下两个问题:
1-A与B有某种关系吗?我可以将它们归入 1 个类别(例如 CCC)吗?
2-是否有任何情况我需要在另一个项目中使用A而不使用B(反之亦然)?
如果第一个问题的答案是“是”,而第二个问题的答案是“否”,那么将它们放在同一个库/包中。当您想决定将东西放在不同的项目中时,请始终考虑可重用性。
这些助手不应该引用您的主要项目,因为它们只是助手和实用程序,并且应该与业务逻辑和业务领域无关。
在您的主要项目(MVC 应用程序或业务逻辑层的库)中,您将在整个代码中使用这些帮助程序。或者您将使用面向方面 (AOP) 库将它们注入到您的代码中。
我不会将 DI 和 automapper 之类的东西视为横切问题。日志记录、审计、身份验证、授权和缓存是 CCC 的很好的例子。但是像 DI 和 Automapper 这样的东西是你用来实现架构模式和设计的东西,所以它们是不同的。并且没有必要创建新的库或助手来将它们应用到您的项目中。