在多个灯开关屏幕中重用通用命令

本文关键字:命令 屏幕 开关 | 更新日期: 2023-09-27 18:03:32

我正在设计一个LightSwitch 2012应用程序来管理请求,我希望能够在所有屏幕上使用相同的可重用代码更新请求状态。例如,用户可以在审批界面、执行界面等更改请求状态。它们是由一个按钮来调用的。目前,我在需要使用partial void <ScreenCommand>_Execute()方法更新请求的每个.cs文件中都有一个方法。我试图改变这一点,这样我就可以从一个地方而不是到处更新代码,我也不想把方法复制到我添加按钮的新屏幕上。现在,通常我会把它放在application。cs或其他地方与全局访问,但我没有访问相同的DataWorkspace对象。我还从屏幕传入this.DataWorkspace对象,它允许访问SaveChanges()方法。然而,这似乎有点臭。是否有更好的方法来处理这个问题,或者有更好的地方来放置您希望能够分配给多个屏幕上的按钮的可重用命令?目前,我必须非常小心地保存脏数据,我仍然需要手动连接所有内容。我也不知道代码是否在适当的上下文中运行,如果它在Application.cs文件中。澄清一下,是的,我确实希望它在客户端运行,这样我就可以从他们的outlook收件箱中触发电子邮件等等。

在多个灯开关屏幕中重用通用命令

您正在尝试做的只是良好的编程实践,将所需的代码放在可以从每个地方调用的位置,但仅在一个地方维护。这只是一个习惯你在LightSwitch中做事情的方式的问题。

您可以在Client项目的UserCode文件夹中的模块(或c#中的静态类)中添加代码。这是文件夹存在的部分原因,作为放置"用户代码"的地方。为此,切换到File View,然后右键单击UserCode文件夹来添加您的模块/类。在新创建的模块/类中添加方法。您可以创建任意多的这些方法(如果您喜欢保持代码分离),或者您可以向相同的模块/类添加其他方法,这取决于您。

但是,我不会将数据工作区作为参数传递给您创建的可重用方法。我甚至也不会传递实体对象,只传递计算所需状态所需的值。但是实际调用数据工作区的SaveChanges方法应该保留在屏幕的代码中。把屏幕想象成一个"工作单元"。

在每个按钮的Execute方法中(在你的各种屏幕中),你用在屏幕中被操纵的实体的值调用你的方法&返回结果。将计算的返回值赋给实体的State属性(如果你有的话),然后调用屏幕的Save方法(或者使用屏幕的Close方法,为SaveChanges参数传递true)。不需要调用数据工作区的SaveChanges方法,&

这样做的另一个好处是,你的代码现在可以单元测试,因为它不再依赖于任何实体。

我希望这些对你来说都是有意义的。