领域层通过数据传输对象(DTO)与其他层进行通信。 我对DTO感到困惑。
DTO 1在领域层和表示层之间。
DTO 2在领域层和数据层之间。
我应该在层之间创建两个不同的DTO对象还是只创建一个DTO对象?哪种方式更专业?
领域层通过数据传输对象(DTO)与其他层进行通信。 我对DTO感到困惑。
DTO 1在领域层和表示层之间。
DTO 2在领域层和数据层之间。
我应该在层之间创建两个不同的DTO对象还是只创建一个DTO对象?哪种方式更专业?
让我们逐层了解:
通常情况下,它知道领域实体和领域层。
DAL 可以返回 领域实体
或 DTOs(面向数据库的数据结构)
。如果需要,这些 DTOs 或领域实体可以用于构建演示层的 DTOs(视图模型
)。
领域实体通常比较复杂,需要 data mappers 或任何 ORM。我更喜欢使用领域实体,将其映射并避免其他 DTOs。否则,DTOs 也应该被映射。
领域层不应该知道实体存储的方式(例如在数据库中)。它可以拥有自己的DTO,这些DTO可以是重构引入参数对象的结果。
它应该知道数据访问层
来从数据库加载数据,并且知道领域层
以便访问其业务逻辑。
它可以拥有自己的DTO - 视图模型,这些视图模型是领域实体或数据库友好DTO的用户界面友好表示。了解视图模型
是表示层的责任。
如果您只有一个表示层,则应用程序基础结构也可以作为表示层的一部分实现,但通常它是单独的应用程序层。
如果我们假设您使用两个分离的DTO(DTO1和DTO2),
答案很简单:
在这种情况下,您必须创建两个独立的DTO:DTO1和DTO2。
即使它们是相同的,也应该实现为分离的类。
这是因为DTO1是在域层中创建的,而DTO2是在数据层中创建的(根据您的图片)。
请注意,在某些解决方案中,不使用两个DTO-有时只有一个DTO。