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