MVC/MVP中的控制器间通信

Nei*_*gan 5 model-view-controller mvp workflow

在MVC/MVP中松散耦合的控制器间通信有什么好方法?

例如,在Quote中,用户必须创建并添加新联系人,或添加现有联系人.

他们选择创建新联系人.完成后,联系人将添加到报价中,并且UI会将用户返回到该报价.如果他们点击取消,他们将返回到报价.

我想在其他地方重新使用联系人,因此它不应该对Quote有任何了解.例如,如果我从联系人列表创建联系人,则应在完成后返回.

以下是我想到的一些选项:

  • ContactsController动作调用ApplicationController.getNextStep(this),ApplicationController代表ContactsController在下一步中找出它

  • ContactsController引发"actioncomplete"事件或类似事件,ApplicationController正在侦听此事件,并调用正确的下一步

  • QuoteController通过下一步将"baton"传递给ContactsController,ContactsController在完成后调用

  • ContactsController引发"actioncomplete"事件或类似事件,QuotesController正在侦听此事件,并调用正确的下一步.

你有这些经验吗?其他想法?这将导致一个大应用程序中最少的头痛?

谢谢!

Nei*_*gan 1

我想我会回答我自己的问题。希望我能得到那份甜蜜的赏金。

从派遣顾问员工去见客户的角度来考虑这个问题。他知道如何做他的工作,但他不知道完成后该做什么。你希望他对下一步做什么保持灵活。

有时他的老板会派他出去。有时首席执行官会这样做(他可能不知道之后要派他去哪里)。有时客户会因紧急情况打电话给他(他肯定不知道之后该把他送到哪里)。有时他只是从白板上抓取一个新任务。

他可以做以下几件事之一:

  • 你可以告诉他完成后给总部打电话,总部会帮他解决。他不需要知道任何其他人,只需要知道总部的电话号码。

  • 你可以在他完成后、离开之前告诉他该做什么。如果他离开一段时间,他的下一个任务可能会同时发生变化。

  • 你可以告诉他完成后发布到Facebook,总部会寻找它,并告诉他该怎么做。总部需要关注所有顾问在 Facebook 上发布的大量帖子。

  • 你可以告诉他的主管在他完成工作后接听他的电话,但随后他的主管需要在办公室,也许他会更换主管。

就我个人而言,我会传递一个回调函数。如果该回调为空,则被调用者应询问应用程序要做什么。这为您提供了一定的灵活性,同时还允许父进程来管理事物,而不是依赖于应用程序中的一项大功能。

这相当于当顾问完成工作后,向他提供下一个要致电的客户的电话号码。如果他没有得到电话号码,他就会给总部打电话。

您也可以使用事件,这不是一个坏主意。唯一的问题可能是,如果多个对象正在侦听此事件,则可能会发生一些意外情况。