Language agnostic 接口锁定的首选设计模式
我有一个执行各种任务的应用程序,每个任务最多需要一分钟。我想确保以一致的方式将应用程序设置为“工作状态”,因此我设置了一个类(我们称之为“LockI”),在初始化时记录各种事物的当前状态(光标、状态栏、屏幕更新等)。然后,当调用它的restrict方法时,它会将所有内容设置为工作状态。在类析构函数中,所有原始设置都被还原,因此我不必担心会出现错误(或者有人忘记调用还原方法)而将应用程序全部锁定。另外,因为它将应用程序恢复到找到它时的状态,如果对该类进行第二次调用,我不必担心当堆栈中较深的类被破坏时,它会意外地解锁应用程序 那么现在我的问题是,假设我上面描述的不是一个错误,应用程序应该被锁定在各个过程中,还是应该在事件处理程序(比如按钮点击处理程序)中锁定应用程序,然后调用过程?(或其他选择。) 澄清:更简洁一些。。。考虑到以下因素:Language agnostic 接口锁定的首选设计模式,language-agnostic,oop,Language Agnostic,Oop,我有一个执行各种任务的应用程序,每个任务最多需要一分钟。我想确保以一致的方式将应用程序设置为“工作状态”,因此我设置了一个类(我们称之为“LockI”),在初始化时记录各种事物的当前状态(光标、状态栏、屏幕更新等)。然后,当调用它的restrict方法时,它会将所有内容设置为工作状态。在类析构函数中,所有原始设置都被还原,因此我不必担心会出现错误(或者有人忘记调用还原方法)而将应用程序全部锁定。另外,因为它将应用程序恢复到找到它时的状态,如果对该类进行第二次调用,我不必担心当堆栈中较深的类被破坏
在单击处理程序中实例化类,然后根据需要将其传递给被调用的过程,或者在被调用的过程中实例化类,如果需要调用多个过程,那么设置一个“漏斗”更好吗?我认为如果相反,您打开了一个带有进度条、状态消息和取消按钮的模式对话框。根据应用程序域、工作方式和用户的首选项,您可以使用多种用户交互模式。根据我的经验,有些人喜欢在屏幕上的任何地方自由输入数据,而不需要任何验证或检查机制来锁定数据,并且只有在他们最后点击“输入”或“保存”时才会出现这些情况。在该模型中,使用刚输入的信息发送潜在问题的状态消息是有帮助的(例如,“结束日期不能晚于开始日期”),但它们必须只是信息性的,而不是模态的。这种方法允许与机器进行非常流畅的交互和较长的“对话时间” 或者,您可以使用您描述的“act&lock”方法,其中系统会阻止用户执行每个操作后的所有进一步交互。如果要执行的操作有一个清晰的序列(不像填写表单,在表单中可以从任何地方开始),如果它们需要相对较长的时间(比在文本框中键入几个字符还要长!),并且如果一个操作和下一个操作之间的依赖关系非常重要,那么这将非常有用(即,如果前一个操作未经验证,则无法执行该操作)。在这种情况下,“操作和锁定”模式是可取的。如果实施得当,它是健壮的,并且可能会降低错误率。在多线程支持很容易负担的现代GUI中,您可以只锁定执行操作的窗口;或者,您可以锁定整个应用程序。它没有那么优雅,但通常更易于开发。在任何情况下,i信息消息是必要的,某种进度条是非常可取的 编辑。关于IMLPemption问题,我会在我的演示(GUI)层中创建一个
ModalInteractor
类,并在我想开始与用户进行新的模式交互时实例化该类的一个对象。该类具有以下职责领域:(a)锁定和解锁相关的用户界面元素,(b)发送进度信号和(c)取消管理。您可以轻松确定每个区域需要哪些属性方法。从语义上讲,ModalInteractor
是管理或驱动GUI的逻辑的一部分(有人会说是“控制器”)。每当用户单击启动冗长过程的按钮时,创建一个新的ModalInteractor
对象,并在构造函数中传递对当前窗口的引用。使用几个委托配置该对象,以便它知道调用什么方法开始冗长过程,在窗口中调用什么方法以获得进度n通知,以及当用户单击Cancel
时要响应的事件
希望这有帮助。这是由类自动完成的:)您可以设置一些属性来更改消息等,并且可以增加进度栏。这样做的目的是保持它的一致性。但我仍然认为显示一个程序条等所有的部分进入一个“工作状态”,所以问题是,如果你把它扔进“工作”的点击处理程序中(记住,如果你的程序将要更新的状态,你必须使一个实例的对象可用于被叫过程).2,以便对问题进行良好的讨论-1用于不回答应用程序/窗口实际应锁定的位置(在单击处理程序或过程中);)谢谢我添加了一些实现细节,希望对您有所帮助。我已经使用过这种方法好几次了,效果很好。