我正在设计一个LightSwitch 2012应用程序来管理请求,我希望能够在所有屏幕上使用相同的可重用代码更新请求状态。例如,用户可以在批准屏幕,履行屏幕等中改变请求状态,其由按钮调用。目前,我在每个.cs文件中都有一个方法,我需要使用partial void <ScreenCommand>_Execute()
方法更新请求。我试图改变这一点,所以我可以从一个地方而不是在任何地方更新代码,我也不想将方法复制到我添加按钮的新屏幕。
现在通常我会将它放在Application.cs或其他具有全局访问权限的地方,但我无法访问相同的DataWorkspace
对象。我还从屏幕传递this.DataWorkspace
对象,允许访问SaveChanges()
方法。然而,这似乎有点臭。有没有更好的方法来处理这个或更好的地方放置您希望能够分配给多个屏幕上的按钮的可重用命令?目前我必须非常小心保存脏数据,我仍然需要手动连接所有内容。我也不知道代码是否在适当的上下文中运行,如果它在Application.cs文件中。
澄清一下,是的,我确实希望这个运行客户端,所以我可以从他们的Outlook收件箱中触发电子邮件等。
答案 0 :(得分:2)
您要做的只是良好的编程实践,将多个位置所需的代码放在可以从每个位置调用的位置,而只在一个位置进行维护。这只是习惯你在LightSwitch中做事的方式。
您可以在客户端<的 UserCode 文件夹中的模块(或C#中的静态类)中添加代码/ em>项目。这是文件夹存在的部分原因,作为放置“用户代码”的地方。为此,请切换到文件视图,然后右键单击 UserCode 文件夹以添加模块/类。在新创建的模块/类中添加方法。您可以根据需要创建任意数量的这些(如果您希望保持代码分离),或者您可以将其他方法添加到同一模块/类中,这取决于您。
但是,我不会将数据工作空间作为参数传递给您创建的可重用方法。我甚至都不会传递实体对象,只需要计算所需状态所需的值。但实际调用数据工作区的 SaveChanges 方法应该保留在屏幕的代码中。将屏幕视为“工作单元”。
在每个按钮的执行方法中(在各种屏幕中),您可以使用屏幕中操作的实体的值调用您的方法。返回结果。将计算的返回值分配给实体的 State 属性(如果这是您拥有的),然后调用屏幕的保存方法(或使用屏幕的关闭方法,为 SaveChanges 参数传递true。无需调用数据工作区的 SaveChanges 方法,&amp;你通过这种方式做“LightSwitch方式”。
这样做的另一个好处是,您的代码现在可以单元测试,因为它不再依赖于任何实体。
我希望你们都有意义。