Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 接口锁定的首选设计模式_Language Agnostic_Oop - Fatal编程技术网

Language agnostic 接口锁定的首选设计模式

Language agnostic 接口锁定的首选设计模式,language-agnostic,oop,Language Agnostic,Oop,我有一个执行各种任务的应用程序,每个任务最多需要一分钟。我想确保以一致的方式将应用程序设置为“工作状态”,因此我设置了一个类(我们称之为“LockI”),在初始化时记录各种事物的当前状态(光标、状态栏、屏幕更新等)。然后,当调用它的restrict方法时,它会将所有内容设置为工作状态。在类析构函数中,所有原始设置都被还原,因此我不必担心会出现错误(或者有人忘记调用还原方法)而将应用程序全部锁定。另外,因为它将应用程序恢复到找到它时的状态,如果对该类进行第二次调用,我不必担心当堆栈中较深的类被破坏

我有一个执行各种任务的应用程序,每个任务最多需要一分钟。我想确保以一致的方式将应用程序设置为“工作状态”,因此我设置了一个类(我们称之为“LockI”),在初始化时记录各种事物的当前状态(光标、状态栏、屏幕更新等)。然后,当调用它的restrict方法时,它会将所有内容设置为工作状态。在类析构函数中,所有原始设置都被还原,因此我不必担心会出现错误(或者有人忘记调用还原方法)而将应用程序全部锁定。另外,因为它将应用程序恢复到找到它时的状态,如果对该类进行第二次调用,我不必担心当堆栈中较深的类被破坏时,它会意外地解锁应用程序

那么现在我的问题是,假设我上面描述的不是一个错误,应用程序应该被锁定在各个过程中,还是应该在事件处理程序(比如按钮点击处理程序)中锁定应用程序,然后调用过程?(或其他选择。)

澄清:更简洁一些。。。考虑到以下因素:

  • 对于较长的操作,您需要一个可用的Lock类实例来更新进度条
  • 您可能要调用多个过程(除非您通过顶级过程来调用它们)
  • 您不会显示所有过程的状态栏(因为有时不需要它,实际上会减慢速度)

  • 在单击处理程序中实例化类,然后根据需要将其传递给被调用的过程,或者在被调用的过程中实例化类,如果需要调用多个过程,那么设置一个“漏斗”更好吗?

    我认为如果相反,您打开了一个带有进度条、状态消息和取消按钮的模式对话框。

    根据应用程序域、工作方式和用户的首选项,您可以使用多种用户交互模式。根据我的经验,有些人喜欢在屏幕上的任何地方自由输入数据,而不需要任何验证或检查机制来锁定数据,并且只有在他们最后点击“输入”或“保存”时才会出现这些情况。在该模型中,使用刚输入的信息发送潜在问题的状态消息是有帮助的(例如,“结束日期不能晚于开始日期”),但它们必须只是信息性的,而不是模态的。这种方法允许与机器进行非常流畅的交互和较长的“对话时间”

    或者,您可以使用您描述的“act&lock”方法,其中系统会阻止用户执行每个操作后的所有进一步交互。如果要执行的操作有一个清晰的序列(不像填写表单,在表单中可以从任何地方开始),如果它们需要相对较长的时间(比在文本框中键入几个字符还要长!),并且如果一个操作和下一个操作之间的依赖关系非常重要,那么这将非常有用(即,如果前一个操作未经验证,则无法执行该操作)。在这种情况下,“操作和锁定”模式是可取的。如果实施得当,它是健壮的,并且可能会降低错误率。在多线程支持很容易负担的现代GUI中,您可以只锁定执行操作的窗口;或者,您可以锁定整个应用程序。它没有那么优雅,但通常更易于开发。在任何情况下,i信息消息是必要的,某种进度条是非常可取的

    编辑。关于IMLPemption问题,我会在我的演示(GUI)层中创建一个
    ModalInteractor
    类,并在我想开始与用户进行新的模式交互时实例化该类的一个对象。该类具有以下职责领域:(a)锁定和解锁相关的用户界面元素,(b)发送进度信号和(c)取消管理。您可以轻松确定每个区域需要哪些属性方法。从语义上讲,
    ModalInteractor
    是管理或驱动GUI的逻辑的一部分(有人会说是“控制器”)。每当用户单击启动冗长过程的按钮时,创建一个新的
    ModalInteractor
    对象,并在构造函数中传递对当前窗口的引用。使用几个委托配置该对象,以便它知道调用什么方法开始冗长过程,在窗口中调用什么方法以获得进度n通知,以及当用户单击
    Cancel
    时要响应的事件


    希望这有帮助。

    这是由类自动完成的:)您可以设置一些属性来更改消息等,并且可以增加进度栏。这样做的目的是保持它的一致性。但我仍然认为显示一个程序条等所有的部分进入一个“工作状态”,所以问题是,如果你把它扔进“工作”的点击处理程序中(记住,如果你的程序将要更新的状态,你必须使一个实例的对象可用于被叫过程).2,以便对问题进行良好的讨论-1用于不回答应用程序/窗口实际应锁定的位置(在单击处理程序或过程中);)谢谢我添加了一些实现细节,希望对您有所帮助。我已经使用过这种方法好几次了,效果很好。