小编use*_*022的帖子

在洋葱、六边形或简洁架构中,域模型是否可以包含与数据库中的域模型不同的属性?

我问你谁知道并有使用任何分层架构(洋葱、六边形、干净等)构建软件的经验。每当我在谷歌上搜索软件架构时,人们都会有不同的观点,并以不同的方式解释相同的架构。

条款

在您阅读问题之前,有些术语可能会让您感到困惑,因此我将在下面对其进行定义。我不确定我是否对它们有“正确”的定义,但我从互联网上收集了这些信息。如果我有误解,请告诉我。

领域层:包含企业/业务逻辑并使用领域模型。位于中心并且不依赖于除领域模型之外的任何其他层。

应用层:包含应用逻辑,从基础设施层接受DTO,传递View Model

DTO(Data Transfer Object):用于在层与层之间传输数据的类、JSON字符串等。可能是一个纯数据容器。

VM(View Model):从应用层传递到表示层的DTO。

DO(Domain Model):域层使用的类、JSON字符串等。可能是一个纯数据容器。

VO(Value Object):数据库实体(一个数据库行),或者数据库使用的一种数据格式。可以从数据库层转移到应用层。

概括

在洋葱、六边形或简洁架构中,域层位于中心(即域层不依赖于域模型以外的任何层,域模型用于将数据传输到其他层或接受来自更高层的数据)。

这意味着域使用的域模型(DTO、POJO、VO 或其他)可能与数据库用于保存持久数据的模型不同。

我画了一个图表,以便我可以给你更好的解释。

在此处输入图片说明

在此处输入图片说明

第一季度

请看第二张图片的红色部分。

与传统的分层或 n 层架构不同,如果领域层位于中心,那么领域模型是否可以拥有比数据库实体(行)更多的属性(或不同的属性)?

例如,假设域层使用一个名为Person的类。用户请求所有在服务器中注册的人的照片。让我们假设数据库只包含所有人的姓名。但是,我们可能会使用其他网络服务器通过姓名请求某人的照片。所以应用层会从数据库中读取所有的名称,并通过这些名称,通过 HTTP 请求从其他 Web 服务器获取所有图片。之后,带有姓名和图片的Person列表将作为视图模型(DTO)发送给用户。

问题二

持久层可能由数据库、文件系统、其他 Web API 等组成。

表示层可以是网站、桌面应用、移动应用、Web API 等。

这两层都是基础设施层的一部分,都依赖于应用层,而应用层只依赖于领域层。

当应用层接受来自表现层的请求时,没有问题,因为表现层调用应用层,表现层知道应用层。

大多数时候,应用层需要从持久层获取数据。

应用层无法在没有任何依赖的情况下调用持久层,因为它不知道持久层中的任何类。

这就是我目前的理解,谁能给我一个清晰的解释,数据应该如何流动以及从低层到高层的通信是如何完成的?

对于那些想写代码的人,我更喜欢 C#。

software-design n-tier-architecture hexagonal-architecture onion-architecture clean-architecture

5
推荐指数
1
解决办法
1352
查看次数

CSS中的minmax()和clamp()有什么区别?

这两个 CSS 函数都将值限制在上限和下限之间。

我知道的唯一区别是 minmax() 只能在 CSS 网格中使用。

css grid minmax

3
推荐指数
1
解决办法
3676
查看次数