【问题标题】:Onion Architecture External Services洋葱架构外部服务
【发布时间】:2023-04-02 11:50:01
【问题描述】:

我目前正在从事一个基于 Onion Architecture 的项目。上图显示了解决方案。

在基础架构中,我们有 External Service 。但是 WebAPI 只能访问 Core 。

但是在 Web API 项目中,我想访问外部服务公开的一些模型? 我们如何在不添加对 Web API 中的基础架构的引用的情况下实现这一点。

还是我们错误地实现了洋葱架构?

【问题讨论】:

    标签: c# .net-4.0 asp.net-web-api onion-architecture


    【解决方案1】:

    从概念上讲,您走在正确的轨道上,但实施并不是一个硬性规定。开始你不需要 5 个以上的项目,最多需要 3 个(web ui css/js/views、逻辑/控制器、代码和测试)。实际上你可能只需要 2 个(应用程序、测试)

    层的概念是概念性的,而不是物理的。并且没有硬性规定必须完全隔离这些层。相反,应用程序的核心焦点是应用程序的功能。当你深入了解它是如何实现的细节时,你会移到外层。

    在这种情况下,您需要访问从外部服务检索到的数据。为外部服务IExternalServiceAdaptor 创建一个抽象。接口可能驻留在域或服务器层,但实现可能驻留在基础架构或外层,其中如何调用外部服务的详细信息封装在 IExternalServiceAdaptor 的实现中。

    如果您坚持物理分离,您将在Core 中拥有一个接口,在Infrstructure 中拥有实现。

    【讨论】:

      【解决方案2】:

      但是在 Web API 项目中,我想访问外部服务公开的一些模型?

      实际上,您的 WebApi 项目应该只操作在您的核心项目中定义的对象。 正如 Jason 所说,对任何外部服务的调用都应该封装在 Core 中的接口实现中。这就是您的外部服务公开的模型将映射到您的核心模型的地方。

      在此处查看 Matt Hidinger 在 CodePlex 上的源代码:http://onionarch.codeplex.com/ 并查看他如何处理此类问题,它非常简单易懂。

      【讨论】:

        猜你喜欢
        • 2013-06-30
        • 2011-10-09
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 2014-06-22
        • 2015-03-17
        相关资源
        最近更新 更多