清洁架构 - DTO到商业模式的映射应该在哪里?

时间:2018-06-18 13:57:46

标签: clean-architecture

我有一个由存储库管理的DTO,最后我想将此DTO映射到Presentation层使用的不同类型的对象。

映射是否应发生在存储库或域层中? (用例/交互者)

3 个答案:

答案 0 :(得分:2)

在干净的架构中,存储库返回被使用的实体" bei the Interactors实施业务规则。 Interactors返回"响应模型"演示者使用(DTO)生成"查看模型"视图使用它们向用户显示结果。

取决于你的责任"不同类型的对象"映射将在Interactor或演示者中。

您可以在我的博客文章中找到有关Interactors和演示者的更多详细信息:https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/

答案 1 :(得分:1)

我认为DTO这个词有点含糊,无法回答这个问题。这实际上取决于转换的目的。

例如,假设我们有某种系统在其实体(域层)中具有Book对象。存储库返回的book对象可能具有一个名为pendingDelete的字段,因为我们将在后台任务中批量删除书籍。领域层需要此字段,但外部不是需要此字段,因此,在用例层中,我们将书本对象转换为不具有该字段的另一个对象(可能通过转换为接口或创建一个全新的对象)。这符合我大脑中DTO的定义,并且这种映射将发生在域层中。

或者,让我们考虑一下,我们需要将该对象转换为一个已用各种注释/元数据修饰的不同对象,这些注释/元数据指示如何将对象序列化为XML或JSON。这也符合DTO的定义,但是这种映射将发生在域层之外。

在第一个示例中,我们使用DTO来控制与内部层的接口,因此我们在内部层中进行了映射。在第二个示例中,我们使用DTO控制到外层的接口,因此我们在外层进行映射。

答案 2 :(得分:0)

用例使用了插件插件是对库(网关)的抽象。

因此,在这种情况下,库(本机或第三方)将必须进行API调用并获取json响应,然后将其转换为DTO对象,并使用回调方法将其移交给用例。然后,用例可以将其移交给演示者,然后将其转换为相应的视图模型。