清洁架构 - 控制器是否应该与演示者交谈?

时间:2015-04-06 06:16:32

标签: architecture software-design

在罗伯特·马丁的Clean Architecture中,假设我有这个简化版本(没有显示模型,网关,边界等其他内容):

enter image description here

现在假设我有一个View,其中包含2个按钮,DarkLight,点按后会更改View的背景颜色并显示一些文字屏幕(文本的颜色应始终为蓝色)。 所以我虽然有这样的事情:

enter image description here

假设我必须在控制器中为两个按钮使用一个方法(可能是因为它是一个表单或其他),button中的buttonClicked(button)变量将包含有关{是否{ <1}}或Dark按钮已被按下。

现在,Light在这种情况下只负责检索要显示的文本,但它不需要知道任何有关背景颜色的信息。

那么,控制器应该告诉演示者选择了哪种颜色(即按钮),还是应该将此信息转发给Interactor,以便它可以将其传递给Interactor?请记住,Presenter甚至不会使用此信息。

1 个答案:

答案 0 :(得分:0)

如果交互者没有使用该信息,则该信息只能用于视图中的格式化目的。因此,您需要了解您的视图(不是视图模型,而不是您的演示者)是如何实现的。您选择的视图格式必须能够响应用户输入,这反过来会影响格式化。

例如,如果视图是HTML,在浏览器上查看,您只需使用javascript来侦听按钮单击并更改颜色。只需将演示者从您的用例转换为视图模型(上例中的文本)。然后,视图使用视图模型根据其选择的格式呈现数据。

您可能还想看看为什么提供不同的颜色。您可能正在尝试通过颜色选择向用户指示系统的某些状态。在这种情况下,按钮可能对用例感兴趣,例如也许按下按钮意味着电子商务网站上的项目被标记为已发货。

在这种情况下,你不会向后和向前传递颜色,但某些商业状态,例如:运货=真。

然后,您的用例将返回演示者您的文本并发送= true。然后,演示者将在您的视图模型上设置shipped = true。然后视图将根据视图模型上的true或false来更改颜色。