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

时间:2015-10-20 19:08:30

标签: architecture controller grasp

enter image description here

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

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

1 个答案:

答案 0 :(得分:0)

这是一个非常广泛的问题,您可能会收到主要是opions,而不是问题解决方案。在我看来(原文如此),显然没有责任创建对象,但可能是单独对象的工作(最有可能是factory)。控制器的工作是调度进入其他服务的工作 - 就是它single responsibility

在同一方面,表单中的对象创建无论如何都是不可能的,但是还有另一个原因是不能在表单中创建对象:客户对象属于业务层(域),而不是表示层。 如果您正在讨论用于在不同层之间传输数据的对象,则此参数将变为无效,参见DTO。在这种情况下,如果UI层创建一个CustomerDTO并将其交给控制器就可以了(上面讨论了对象创建的责任也适用于此)。