User interface 什么';当用户对象有多个查看器时,实现删除该对象的最佳方法是什么?
假设我有一个GUI,其中有多种类型的用户对象查看器。例如,树视图、列表视图和图表视图。这三个视图显示相同的对象。如果用户从一个视图中删除一个对象,我想触发一个事件来通知其他两个视图。目前,我通过公开对象本身上的事件来实现这一点。因此,如果从视图1中删除该对象,视图1将调用该对象上的delete,然后将向订阅服务器(所有3个视图)触发一个事件。每个订户都有机会取消删除 在我看来,有几个问题。如果一个订户在另一个订户已经批准删除后取消了删除,那么我必须指示这些订户撤消删除User interface 什么';当用户对象有多个查看器时,实现删除该对象的最佳方法是什么?,user-interface,design-patterns,User Interface,Design Patterns,假设我有一个GUI,其中有多种类型的用户对象查看器。例如,树视图、列表视图和图表视图。这三个视图显示相同的对象。如果用户从一个视图中删除一个对象,我想触发一个事件来通知其他两个视图。目前,我通过公开对象本身上的事件来实现这一点。因此,如果从视图1中删除该对象,视图1将调用该对象上的delete,然后将向订阅服务器(所有3个视图)触发一个事件。每个订户都有机会取消删除 在我看来,有几个问题。如果一个订户在另一个订户已经批准删除后取消了删除,那么我必须指示这些订户撤消删除 有什么好的模式来实现这种常
有什么好的模式来实现这种常见场景吗?如果一个对象要从所有视图中删除,或者根本没有视图
如果要从所有视图中删除对象,或根本不删除任何视图
这里的转折点是每个订户都有机会取消删除。通常,当你使用“查看”和“订阅”这两个词时,意味着你是被动的,只是对你看到的东西做出反应 这并不意味着你想做的事情是不可能的,但这肯定是很棘手的。例如,您可以尝试执行一种两阶段提交,即标记对象已删除,然后等待所有查看者确认删除,然后再真正删除该对象。(这基本上是chelmertz建议的“询问每个订阅者是否可以删除该项目”的方法。)然而,这意味着您需要确切知道有多少观众,并且所有观众都需要在您完成删除之前做出响应。你总是有三个观众吗?只有两个吗?如果其中一个查看器中出现错误,该怎么办?删除是否失败,或者是否仍要继续删除该对象 事件驱动系统的好处在于,您通常不必担心这些问题:您只需更改模型(在本例中,删除对象)并触发更改事件。你不需要知道任何关于你的观众的事情
因此,如果这是我的系统,我会尝试找出一种方法,使模型更改仅在应用于模型之前可取消,而不是尝试通过模型将更改应用于其他视图,然后尝试稍后回滚这些更改。这里的转折点是,每个订阅者都有机会取消删除。通常,当你使用“查看”和“订阅”这两个词时,意味着你是被动的,只是对你看到的东西做出反应 这并不意味着你想做的事情是不可能的,但这肯定是很棘手的。例如,您可以尝试执行一种两阶段提交,即标记对象已删除,然后等待所有查看者确认删除,然后再真正删除该对象。(这基本上是chelmertz建议的“询问每个订阅者是否可以删除该项目”的方法。)然而,这意味着您需要确切知道有多少观众,并且所有观众都需要在您完成删除之前做出响应。你总是有三个观众吗?只有两个吗?如果其中一个查看器中出现错误,该怎么办?删除是否失败,或者是否仍要继续删除该对象 事件驱动系统的好处在于,您通常不必担心这些问题:您只需更改模型(在本例中,删除对象)并触发更改事件。你不需要知道任何关于你的观众的事情 因此,如果这是我的系统,我将尝试找出一种方法,使模型更改仅在应用于模型之前可取消,而不是尝试通过模型将更改应用于其他视图,然后尝试稍后回滚这些更改