【问题标题】:Cross Cutting Layer | Automapper | Dependency Injection横切层 |自动映射器 |依赖注入
【发布时间】:2016-06-09 22:38:40
【问题描述】:

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

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

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

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

我是否应该将 Automapper 视为横切关注点?到目前为止,我在 Presentation 层中设置了它,以便从 Entity 转换为 ViewModel 并将 ViewModel 转换为 Entity。因此,我不得不添加对 Model 的引用,这是我想避免的。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢@akazemis,所以您认为有一个项目来设置 DI 和另一个项目来设置映射会更有趣吗? DI 和 mapping 都必须知道其他项目,这就是我想将它们分开的原因。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多