gpt4 book ai didi

inversion-of-control - 洋葱架构与 IoC 矛盾吗

转载 作者:行者123 更新时间:2023-12-02 06:03:47 26 4
gpt4 key购买 nike

Jeffrey Palermo 开创了洋葱架构,我找到了一个很好的方法。

http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/

然而,如果我的理解是正确的,他的声明“内层定义接口(interface)。外层实现接口(interface)”似乎与 IoC 相矛盾,它指出消费者定义接口(interface)和提供者实现它,即控制权在于消费者而不是提供者。

这个原则对我来说很有意义,因为假设你正在编写一个 UI,这个原则意味着你可以继续创建你的 UI,而不需要知道你要调用的服务,因为你负责定义暴露所有的接口(interface)您需要的功能。

因此,为此,Jeffreys 的声明似乎自相矛盾,让我对将契约(Contract)(接口(interface)定义)放在哪里感到困惑,因为它似乎暗示:
领域层
我的实体
IMyService
服务
我的实体服务:IMyService

由于域下面没有层,我将 IMyEntity 放在哪里。这也意味着在域存在并定义 IMyService 之前,我无法创建演示项目。

正如我的旁注,我在哪里放置 IMyEntityRepository 和 MyEntityRepository ?由于服务依赖于 IMyEntityRepository 而 MyEntityRepository 依赖于 IMyEntity

最佳答案

那么,从哪里开始呢? :-)

让我们从国际奥委会的真正角色开始。根据Wikipedia ,

Inversion Of Control is a programming technique in which object coupling is bound at run time by an assembler object and is typically not known at compile time.



在您的情况下,您的 UI 将在不知道将在运行时绑定(bind)的服务实现的情况下操作服务接口(interface)。定义这些服务接口(interface)不是由消费者决定的;它们将在您的 Onion 架构的应用程序核心中定义,但我们稍后会看到。

“内层定义接口(interface),外层实现接口(interface)”,洋葱架构就是这样设计的,但别忘了最外层是IOC!由 IOC 在运行时将接口(interface)与正确的实现绑定(bind)!

你说得对,如果没有至少一种可用于你要操作的接口(interface)的实现,你的 UI 就无法工作。但在这种情况下,如果出于任何原因需要先构建 UI,请考虑使用模拟框架!

您的最后一个问题是关于您需要放置 IMyEntityRepository 和 MyEntityRepository 类的位置。好吧,这很容易;-) IMyEntityRepository 肯定需要放在您的应用程序核心中。您的所有实体、服务接口(interface)、存储库接口(interface)以及任何需要位于同一位置的接口(interface)。 MyEntityRepository 实现应该放在基础设施层的某个地方,因为他的角色主要是处理从数据库中获取数据。

希望有帮助!

关于inversion-of-control - 洋葱架构与 IoC 矛盾吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com