交叉切割层| Automapper |依赖注入

时间:2016-06-05 22:40:57

标签: c# model-view-controller architecture automapper cross-cutting-concerns

我有一个MVC分层应用程序,我对Cross Cutting层有一些疑问。到目前为止,该层具有Logging,DI,Error Handling和Cache。

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

因为我在这个项目中设置了Autofac(DI文件夹),我不得不添加对其他项目的引用:Model,Repository和Service。是否可以将这些引用添加到Cross Cutting项目中?

我应该创建一个单独的项目来分组常用功能吗?例如Enums,Constants和GetMd5Hash等方法。或者我应该使用Cross Cutting项目吗?

我应该将Automapper视为一个跨领域的关注点吗?到目前为止,我在Presentation层中进行了设置,将Entity转换为ViewModel,将ViewModel转换为Entity。因此,我不得不添加对Model的引用,我想避免使用它。

2 个答案:

答案 0 :(得分:1)

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

1-是一种与B有关吗?我可以将它们分为1类(例如CCC)吗?

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

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

这些帮助程序不应该引用您的主项目,因为它们只是帮助程序和实用程序,应该是业务逻辑和业务域不可知的。

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

我不会将DI和automapper等问题视为交叉问题。记录,审计,身份验证,授权和缓存是CCC的好例子。但是像DI和Automapper这样的东西是你用来实现你的架构模式和设计的东西,所以它们是不同的。没有必要创建新的库或帮助程序来在项目中应用它们。

答案 1 :(得分:1)

欢迎您,是的,您可以这样做但是将它们放在一个单独的项目中的重点是什么?您想在不同的项目中重复使用它们吗?如果是这样的话,为他们创建项目。

相关问题