使用 GRASP 控制器时如何处理用户输入?

What to do with user input when using the GRASP controller?

假设用户想要向系统添加客户。他用客户信息填写表格,然后按下按钮。单击事件由 UI 层中的表单对象捕获。谁负责使用用户提供的信息、表单本身或业务层中的控制器创建新的客户对象?

在“应用UML和模式”一书中,在我目前看到的示例中,用户输入以表单或参数的形式传递给控制器​​,然后控制器创建适当的对象。我的疑问是因为有人告诉我,最好使用对象而不是一堆参数在层之间传递数据。

这是一个相当宽泛的问题,您可能收到的主要是意见,而不是问题解决方案。在我看来(原文如此)创建对象显然不是责任,而可能是单独对象的工作(factory most likely). The job of the controller is to dispatch work coming in to other services -- that's it's single responsibility

同样的道理,无论如何在窗体中创建对象是不行的,但是不在窗体中创建对象还有一个原因:客户对象属于业务层(域),不表现层。 如果您谈论的对象创建是为了在不同层之间传输数据,则此参数无效,请参见。 DTO。在这种情况下,如果 UI 层创建一个 CustomerDTO 并将其交给控制器就好了(上面关于对象创建责任的讨论也适用于此)。