XAF-Domain Components 技术 使用接口来定义ORM业务对象

XAF-Domain Components 技术 使用接口来定义ORM业务对象

ID:44811971

大小:36.77 KB

页数:10页

时间:2019-10-29

XAF-Domain Components 技术 使用接口来定义ORM业务对象_第1页
XAF-Domain Components 技术 使用接口来定义ORM业务对象_第2页
XAF-Domain Components 技术 使用接口来定义ORM业务对象_第3页
XAF-Domain Components 技术 使用接口来定义ORM业务对象_第4页
XAF-Domain Components 技术 使用接口来定义ORM业务对象_第5页
资源描述:

《XAF-Domain Components 技术 使用接口来定义ORM业务对象》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、简介 DomainComponent组件技术,以下简称DC,是扩展自XPO的, 官方不建议新手使用DC。如果你用过EF,XPO及类似的ORM,这是很容易理解的,DC是基于XPO的,只是原来定义ORM对象时用的是类,现在改用接口。然后通过DC上声明的一些Attribute来生成最终的类代码,在运行时编译,最终还是生成了xpo的类。 当然接口只是可定义一些结构,方法,属性及一些个性化的逻辑并没有实现,再使用一个Logic类,来做真正的实现。对于一些默认的读写功能的属性,不需要在logic类中实现。DC机制会默认生成一个实现。 ·可以创建可

2、重用的领域对象:多数情况下,每个XAF中用到的领域对象都不是唯一的,比较常见的对如:人、电话、地址,等领域对象,这些使用频率较高的,想要抽象出来还是有点难度的,这不是一个简单的任务,使用DC这事就简单了。·可以使用多重继承:因为DC是用接口描述的,所以,多继承在C#的语法级别被支持,你可以使用继承以前写过的DC,重用它,并且可以增加新的属性和替换逻辑。事实上,这是我最喜欢的一个特性!·不需要从持久性化基类继承实现领域对象:最终的执行代码是生成的,这当然很容易实现了。当然,也可以指定基类。   注意:·在MediumTrust 环境中,DC

3、组件不能使用。·DC组件技术不支持ModelFirst和Databasefirst的方式。我们不推荐使用附加(就是两个或多个)数据库。因此,我们不提供任何手段从现有数据库生成域组件代码和逻辑,我们有没有立即的计划来支持此方案。请试试 XPO 或实体框架数据模型。·自定义字段不能在设计时添加到域组件。·如果一个DC组件注册为SharePart,不能添加自定义字段。   二、DC定义 下面的代码片段演示如何定义一个DC[DomainComponent]publicinterfaceIPerson{stringLastName{get;set;

4、}stringFirstName{get;set;}stringFullName{get;}voidCopy(IPersontarget);}你可以看到,接口上必须使用DomainComponentAttribute 来声明接口是个DC.接口的属性就是将来出来表的字段.在普通BO定义中使用的一些Attribute现在仍可用.例如你可以给LastName 上面加上 RuleRequiredFieldAttribute,给接口上加上 NavigationItemAttribute. FullName 被定义为只读的.它需要在logic类中定义

5、实现.另外Copy方法也必须在logic中实现. 三、注册DC 只有注册了DC后,才会被XAF生成真正的XPO类,下面是注册方法,需要打开Module.cs文件,实override下面的方法: usingDevExpress.Persistent.BaseImpl;//...publicoverridevoidSetup(XafApplicationapplication){base.Setup(application);XafTypesInfo.Instance.RegisterEntity("Person",typeof(IPerso

6、n));} 上面的注册中,并没有指定基类,所以将会默认使用DCBaseObject 做为基类,如果要指定基类,可以看下RegisterEntity的其它重载方法。  四、DomainLogic 每个DC可以有一(零)个或多个DomainLogic.DomainLogic是一个普通的类,加上了 DomainLogicAttribute 标记,并指定DC类型.其实再多的话都没有一个代码实例有用: [DomainLogic(typeof(IPerson))]//必须写个,IPerson是指为哪个DC的逻辑publicclassPersonLog

7、ic{//类别是任意的publicconststringFullNameSeparator="";publicstringGet_FullName(IPersonperson){    //Get_XXXGet_是固定的,实现property的get的方法,FullName是属性的名称returnstring.Format("{0}{1}{2}",person.FirstName,FullNameSeparator,person.LastName);}publicstaticvoidCopy(IPersonperson,IPersonta

8、rget){    //实现了上面定义的Copy方法,但是,注意,第一个参数,在接口中并没有定义,但在这里却可以出现,也可以不出现,调用时会被自动替换为当前对象if(target!=null)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。