事件发生在我们的模型和视图模型中,需要创建适当的视图。问题是如何做到这一点并避免在 VM 或 M 中有任何 View 代码?
这是事件的顺序,因此您可以看到这个困境:
用户在表单中设置一个数字字段以启动一个长时间运行的后台进程,然后单击“开始”按钮。如果这个长期运行的过程成功,那么它需要弹出一个带有图表的图表来显示结果。但是,如果数据因任何原因处理失败,则无法弹出图表,而是会记录一条错误消息,该消息显示在表单的文本框中。
现在,该启动按钮调用 ViewModel 中的一个方法,该方法实际上启动了后台线程。
只有背景可以确定何时或是否创建视图。
目前,我们通过使用一个名为 ChartInterface 的接口来实现这一点。视图实现了这个接口,然后设置一个回调委托一直到后端模型。当它决定创建图表时,它会调用回调并使用接口传递适当的数据等。
但是,这会带来一个问题,因为它可能会生成数十或数百个图表。因此,我们需要一个“仪表板”,其中包含所有图表的列表,供用户选择要查看的图表。
所以现在后端需要决定何时或是否创建仪表板视图,然后将图表视图添加到其中。
所以它变得越来越混乱,因为这样的情况会越来越多,因为我们有很多需要视图的模型,所以创建大量的回调委托会很快变得丑陋。
一个似乎简化而不是大量回调的想法是只将一个接口传递给 ViewBinder 到后端。然后每次创建模型对象时,它可以将它传递给 ViewBinder 以查看它是否想将任何视图对象绑定到它。
我们的想法是,大多数后端对象都会(最终)以图形方式进行监控。所以如果他们每个人在构建之后都被传递给 ViewBinder 接口,那么视图可以决定是否要绑定任何东西。
这听起来总是更好。