EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

实现业务逻辑的方法

业务逻辑代码有两个常见的地方-控制器和业务类本身。在Controller中,您可以声明新的和自定义现有的Action并处理其他Controller的事件。在业务类中,可以将逻辑放入属性获取器和设置器中,实现在创建,加载,保存和删除对象时自动触发的方法(请参阅IXafEntityObject),并声明操作方法。在这些情况下,当当前业务对象公开的数据不足以满足您的业务逻辑,并且您需要查询更多数据时,就需要对象空间。您也可以在数据库初始化代码中的复杂“查看项”中使用“对象空间”。等等。本主题描述可用于在各种上下文中获取对象空间的API。

获取现有的对象空间

通常,您可以使用可通过XAF API访问的现有对象空间实例。下表描述了如何从代码的各种上下文中获取对象空间:

语境

访问对象空间的方法

例子

业务对象

实例化支持IObjectSpaceLink的业务对象时,会自动将对象空间引用分配给IObjectSpaceLink.ObjectSpace属性。您可以实现此接口,并使用传递给ObjectSpace属性的对象空间直接在当前对象代码中访问其他业务对象。

如果另外实现IXafEntityObject,则可以将逻辑放入IXafEntityObject.OnCreatedIXafEntityObject.OnLoadedIXafEntityObject.OnSaving方法中。您可以使用XAF业务对象| 从模板库的EF业务对象添加支持IXafEntityObject和IObjectSpaceLink的类。

我们建议使用Controllers而不是访问与UI相关的实体(ViewsControllersActions)并在业务类代码中执行特定于UI的逻辑,因为它违反了关注点分离原则并且违反了MVC体系结构。

控制器

在XAF应用程序中,将自动为每个View分配一个对象空间。在视图控制器中,可以使用ViewController.View属性获取当前视图。然后,使用View.ObjectSpace访问对象空间。您还可以使用受保护的ViewController.ObjectSpace属性,该属性引用与View.ObjectSpace相同的对象空间。

窗口控制器不会直接公开视图。您可以使用Controller.Frame属性访问当前Frame并使用Frame.View获取View 。

每次对象更改时,视图都会处理对象空间事件以更新UI。我们建议创建一个未绑定到当前View的新对象空间,而不是使用 View.ObjectSpace属性来处理大量数据。使用XafApplication.CreateListViewXafApplication.CreateDetailView方法创建新的视图时,还应该使用新的对象空间。

模块更新器

ModuleUpdater后代中,可以使用受保护的ModuleUpdater.ObjectSpace属性访问可用于数据库更新操作的对象空间实例。不要使用新的对象空间来更新数据库。

清单编辑器

如果您的自定义列表编辑器支持IComplexListEditor接口,则对CollectionSourceBase对象的引用将自动传递到IComplexListEditor.Setup方法。您可以实现此接口,并通过CollectionSourceBase.ObjectSpace属性访问对象空间。

查看项目属性编辑器

如果您的自定义视图项或属性编辑器支持IComplexViewItem接口,则对对象空间的引用会自动传递到IComplexViewItem.Setup方法。您可以实现此接口,并将对象空间引用存储到局部变量中以备将来使用。

还可以使用传递给XafApplication类的各种事件的参数来使用对象空间。

事件 对象空间参数
XafApplication.CreateCustomCollectionSource CreateCustomCollectionSourceEventArgs.ObjectSpace
XafApplication.CreateCustomLogonWindowObjectSpace CreateCustomPropertyCollectionSourceEventArgs.ObjectSpace
XafApplication.CreateCustomPropertyCollectionSource CreateCustomLogonWindowObjectSpaceEventArgs.ObjectSpace
XafApplication.ObjectSpaceCreated ObjectSpaceCreatedEventArgs.ObjectSpace
XafApplication.ViewCreating ViewCreatingEventArgs.ObjectSpace

创建一个新的对象空间

通常有必要实例化一个新的对象空间(例如,当您使用XafApplication.CreateListViewXafApplication.CreateDetailView方法创建View时)。使用XafApplication.CreateObjectSpace(Type)方法代替对象空间构造函数来创建对象空间。例如,Controller.Application属性在Controller上下文中可用,您可以按以下方式创建对象空间:

IObjectSpace objectSpace = this.Application.CreateObjectSpace(typeof(MyBusinessClass)); 

请参阅XafApplication类说明,以了解如何在各种上下文中获取XafApplication实例。您不能在业务对象上下文中创建新的对象空间,因为那里没有XafApplication实例。

例子:

重点

如果未将对象空间分配给视图,则应在使用完该对象空间后手动对其进行处理。与视图关联的对象空间会与此视图一起自动删除。

一旦获得或创建了对象空间,就可以使用它来查询或修改数据(请参阅创建,读取,更新和删除数据)。

相关文章

转载保留此链接,注明出处