gpt4 book ai didi

ios - 清洁架构 - Robert Martin - 如何连接用例

转载 作者:技术小花猫 更新时间:2023-10-29 10:45:20 27 4
gpt4 key购买 nike

我正在尝试实现 Clean Architecture由罗伯特·马丁描述。更具体地说,我正在使用 VIPER这是 Clean Architecture 的 iOS 版本。

我遇到的问题如下:

用户开始查看带有地点(图钉)的 map 。如果他点击一个按钮,一个图钉就会被放下,他会被带到另一个 View 来创建(或者编辑,如果它是点击一个现有的图钉)这个地方(或取消)。在另一个 View 中,用户可以编辑该地点的信息,然后单击“返回”或“完成”(或“编辑”)。如果他单击“完成”,PlaceDetailsViewController 会向 PlaceDetailsPresenter 发送一条消息,其中包含地点信息,PlaceDetailsPresenter 使用 CreatePlaceInteractor 来创建地点。此交互器返回用于标识地点的 GUID。

如果用户在创建地点之前单击返回,他将返回到 map ,并且放下的图钉会上升并消失(因为它没有 GUID,所以它是一个新地点并消失)。如果他在创建后单击返回,则图钉会保留在那里(因为它应该有一个 GUID)。

我应该如何连接所有这些以及位置信息(包括 GUID)应该存储在哪里?澄清一点:

  1. 谁应该通知 MapPresenter 图钉停留在那里或消失了?是 PlaceDetailsPresenter 还是我应该将此信息传递给 PlaceDetailsWireframe -> MapWireframe -> MapPresenter -> MapView ?
  2. 在返回之前,这个 GUID 应该存储在哪里,是在 PlaceDetailsPresenter 中还是在 PlaceDetailsViewController 中?

现在这就是我所拥有的: enter image description here

编辑:

基本上我认为问题是 VIPER 来自 Robert Martin 的 Clean Architecture,他来自 Web (Rails) 背景,所以他对 state 考虑不多(或者在他的演讲中没有具体说明)。

这主要是我的问题,状态应该存储在哪里,不同的模块应该如何通信,是通过线框,还是通过数据库,还是通过交互器,还是像这里这样通过Presenter相互通信https://github.com/objcio/issue-13-viper-swift .

最佳答案

我对 Viper 了解不多,所以我无法对此发表评论。然而,系统的总体状态应该保存在实体对象中并由交互者操纵。 GUI 的详细状态(选择矩形等)应该由 Controller 和呈现器之间的特殊连接来管理。

在您的情况下,有两个屏幕。 map 和地点编辑器。单击 map 会导致调用 placePinController。它收集点击的位置和任何其他上下文数据,构造一个 placePinRequest 数据结构并将其传递给 PlacePinInteractor,后者检查 pin 的位置,必要时对其进行验证,创建一个 Place 实体来记录 pin,构造一个 EditPlaceReponse对象并将其传递给 EditPlacePresenter,后者会显示地点编辑器屏幕。

如果在地点编辑器屏幕上单击“完成”按钮,它会调用 EditPlaceController,后者将已编辑的数据收集到 EditPlaceRequest 数据结构中,并将其传递给 EditPlaceInteractor。等..

您专门询问了 pin 的 GUID。这将由 Place 实体创建并传递回 editPlacePresenter PlacePinInteractor。

关于ios - 清洁架构 - Robert Martin - 如何连接用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28892833/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com