编程语言
首页 > 编程语言> > java – 洋葱六边形架构依赖混淆

java – 洋葱六边形架构依赖混淆

作者:互联网

我在理解六边形(端口适配器)体系结构中依赖的含义时遇到问题.

Here他们有很好的照片.我没有看到的是与n层结构有什么区别(实现).

在洋葱/十六进制架构中,内层应该独立于外层,但它是如何实现的(请注意我的java / spring背景)

在N层中,您可以自动连接N个第1层组件.我看到依赖的方向,但你怎么能还原它: – /

如果我要打电话给outer layer,我会使用界面.
所以界面在内层,在外层实现.现在我独立于外在.就是这个?这是关于API的位置?

无论如何,hex / onion应该独立于依赖性解析,所以它是否意味着我不应该使用@Autowire,@ Inject等?

非常感谢您提前澄清.

解决方法:

哇,那是很多问题.我会尝试逐一介绍它们

In onion/hex architecture the outer layers should be independent from inner ones, but how is it implemented(please note my java/spring background)

有了建筑模式,你会发现许多不同的解释,但是这一点让我觉得很奇怪.洋葱图案的内部部分是您的域逻辑,而外部部件是其他域或技术(数据库,Web服务……)的适配器.您不希望您的域依赖于这些技术细节,因此外部部分可能取决于内部部分,而不是相反.

In N-layered you auto-wire the N+1th layer components. I see the direction of the dependency, but how can you revert it:-/

这称为控制反转.您的域(内部部分)通常需要调用适配器(例如您的数据库访问逻辑),因此在运行时必须存在依赖关系.但是在编译时你不需要这样的依赖,以便能够替换所使用的特定技术.您可以通过使用接口和依赖注入来实现.示例:您的域可能需要访问所有品牌的列表.为此,您可以创建如下界面:

public interface BrandRepository{
    public Set[Brand] all()
}

此界面是您域的一部分.您当然有一个该接口的实现,可能基于Jdbc(或内存列表或Web服务).这种实施方式生活在洋葱的外层.由于实现接口依赖于内部部分,因此要求.

If I’m about to call outer layer, I will use interface. So the interface is in inner and implementation in outer layer. Now I’m independent on outer. This is it?

It is just about where the API is placed?

很难回答:你的API是什么?您的域模型是适配器的API.适配器是系统其他部分或其他系统的API.

Anyway the hex/onion should be independent from dependency resolution, so does it mean I should not use @Autowire, @Inject etc??

现在,人们可以争论永恒.严格来说,这些注释是依赖于您的DI-Framework.但是,由于这些已经标准化,它们变得更加依赖于您的语言(在没有进入无限递归和收集大量语言设计经验的情况下,您无法避免).对Annotations的依赖性,根据定义,它不能包含任何实现,这不是一个问题,我个人很好,在我的代码中使用它们.

What I don’t see is what is the difference(implementation) from n-layer structure.

洋葱结构是n层结构的相当通用的术语的特定变体.

标签:onion-architecture,java,spring,dependency-injection,architecture
来源: https://codeday.me/bug/20190830/1765136.html