DevExpress_XAF_初始化业务对象的默认属性值(一)——使用XPO框架

  在设计业务类时,一个常见的任务就是初始化对象。接下来的内容,我们将初始化不同类型的属性。

  例如,将实现联系人(Contact)业务类,创建对象后,将使用默认值初始化对象。

  在官方文档中,找到的初始化默认对象属性值有两种方法(代码基本一致):一种是继承XPO框架的AfterConstruction()方法(我几乎是使用该方法);另一种是使用实体框架(Entity Framework),实现接口IXafEntityObject的OnCreated方法。

  注:官方Demo网址详见参考网址。

简单属性

  所有的基本持久类都派生自PersistentBase类。 可以使用PersistentBase.AfterConstruction方法作为业务对象的初始化方法。只在创建对象后调用一次。由于此方法是专门为初始化设计的,所以在为对象属性赋值时不需要检查当前对象状态。代码演示如下:

1 public class Contact : Person {
2 //... 
3     public override void AfterConstruction() {
4         base.AfterConstruction();
5 
6         FirstName = "Sam";
7         TitleOfCourtesy = TitleOfCourtesy.Mr;
8     }
9 }

 引用属性

  引用属性也在AfterConstruction方法中初始化。与简单属性不同的是,需要获得现有对象。因此, 使用到FindObject方法。具体代码如下:

 1 public class Contact : Person {
 2     //... 
 3     public override void AfterConstruction() {
 4         base.AfterConstruction();
 5         Address1 = new Address(Session);
 6         Address1.Country = Session.FindObject<Country>(CriteriaOperator.Parse("Name = 'USA'"));
 7         if(Address1.Country == null) {
 8             Address1.Country = new Country(Session);
 9             Address1.Country.Name = "USA";                
10             Address1.Country.Save();
11         }
12         Manager = Session.FindObject<Contact>(CriteriaOperator.Parse(
13             "FirstName = 'John' && LastName = 'Doe'"));
14     }
15 }

 集合属性

  集合属性使用XPCollection.Add方法。以下代码演示如何使用预定义的电话号码填充集合。

 1 public class Contact : Person {
 2 //... 
 3     public override void AfterConstruction() {
 4         base.AfterConstruction();
 5 
 6         PhoneNumber phone1 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
 7             "Number = '555-0101'"));
 8         PhoneNumber phone2 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
 9             "Number = '555-0102'"));
10         PhoneNumbers.Add(phone1);
11         PhoneNumbers.Add(phone2);
12     }
13 }

 计算属性

  略。当关联属性发生改变时,计算属性会自动发生变化

通过新活动(Action)初始化新创建对象

  略。详见https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Action

用从主对象获取的值初始化子对象的属性

  可以在引用主对象的属性的setter中为子对象的属性设置默认值。

 1 public class ChildObject : BaseObject {
 2     // ... 
 3     public MasterObject MasterObject {
 4         get { return masterObject; }
 5         set {
 6             bool modified = SetPropertyValue("MasterObject", ref masterObject, value) ;
 7             if (!IsLoading && !IsSaving && value != null && modified) {
 8                 this.SomeProperty = value.DefaultForChildren;
 9             }
10         }
11     }
12 }

 参考网址

  [1]相关博文——初始化业务对象初始化业务对象的默认属性值(二)——使用实体框架(Entity Framework):https://www.cnblogs.com/luyj00436/p/11489185.html

  [2]https://documentation.devexpress.com/eXpressAppFramework/113258/Task-Based-Help/Business-Model-Design/eXpress-Persistent-Objects-XPO/How-to-Initialize-Business-Objects-with-Default-Property-Values-in-XPO

  [3]官网项目示例:http://www.devexpress.com/example=E2053

  [4]默认属性值初始化对象:https://documentation.devexpress.com/eXpressAppFramework/113712/Task-Based-Help/Business-Model-Design/Entity-Framework-EF/How-to-Initialize-Business-Objects-with-Default-Property-Values-in-Entity-Framework

  [5]简单初始化属性的教程:https://documentation.devexpress.com/eXpressAppFramework/112834/Getting-Started/Comprehensive-Tutorial-MainDemo-Application/Business-Model-Design/Business-Model-Design-with-XPO/Initialize-a-Property-After-Creating-an-Object-XPO

  [6]通过新活动(Action)初始化创建对象:https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Action

posted @ 2019-09-08 23:16  陆陆无为而治者  阅读(538)  评论(0编辑  收藏  举报