洋葱架构外部服务

3

我目前正在进行一个基于洋葱架构的项目。上面的图片展示了解决方案。

在基础设施中,我们有外部服务。但是WebAPI只能访问核心部分。

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

或者我们实现了错误的洋葱架构吗?

2个回答

2
从概念上讲,你走在正确的轨道上,但实现并没有硬性规定。起步时,你最多只需要3个项目(Web UI CSS/JS/视图,逻辑/控制器,代码和测试),而不是5个以上。实际上,你可能只需要2个项目(应用程序和测试)。
层的概念是概念性的,而不是物理的。并且,并没有硬性规定说这些层必须完全隔离。相反,应用程序的核心重点是应用程序所做的事情。当你深入了解如何实现该功能时,你会进入外层。
在这种情况下,你需要访问从外部服务检索到的数据。为外部服务创建一个抽象层。接口可以位于域或服务器层中,但实现可能位于基础设施或外层中,在IExternalServiceAdaptor的实现中封装了如何调用外部服务的详细信息。
如果你坚持物理分离,你将在中拥有一个接口,而在中拥有一个实现。

0
但是在Web API项目中,我想要访问一些外部服务暴露的模型?实际上,你的WebApi项目应该只操作在核心项目中定义的对象。正如Jason所说,对任何外部服务的调用都应该封装在核心项目中的接口实现中。这就是将外部服务暴露的模型映射到核心模型的地方。
请查看Matt Hidinger在CodePlex上的源代码:http://onionarch.codeplex.com/,看看他是如何处理这种问题的,非常直观和易于理解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接