XAF新手入门 - 数据字典示例
前言
通过前面文章的介绍,大家应该对模块与类型信息子系统有所了解,再通过一个示例来加深大家对它的理解。
在准备写这个系列文章之前,就准备是概念+示例的组合,这样大家对概念的理解会更深刻。之前的规划是在讲到一个比较重要的概念或多个概念时给出一个示例,示例也是针对大家都熟悉的场景(如:学生),虽然也能描述出概念中的知识点,但事后考虑到实用性不强,不能直接应用到实际项目中,所以改变了一下思路,以后的示例会更注重实用,示例中的项目可以间接或直接的应用到实际项目中。
示例概述
数据字典几乎每个项目中都会涉及到,有的会将每一个字典分别采用不同的实体表,由于字典的结构差不多,所以有的会共用一个实体表。我们当前的示例就是共用一个实体表的数据字典,先说一下它的使用方法,代码如下:
示例代码放到了码云(https://gitee.com/easyxaf/data-dictionaries),以后示例的项目都是以EasyXaf开头。
在BO(BusinessObject)中添加上面的代码,BO中的性别与岗位就是一个字典数据了,性别是单选的,岗位是多选的,效果如下图:
下面是管理数据字典的界面,字典列表:
字典项管理:
整个示例的核心代码很少,大部分工作都是XAF帮我们完成了。
实现思路
先看一下整个项目的结构:
EasyXaf.DataDictionaries是整个项目的核心,它是一个独立的XAF模块项目,可直接应用到其它的XAF项目中,其它两个是由XAF向导生成,用于演示本示例的。
EasyXaf.DataDictionaries项目结构:
XPO的一个知识点,在XPO中是不能直接关联(Association)一个外部程序集中的BO(BusinessObject),XAF中自身的BO都是放在同一个程序集中的(DevExpress.Persistent.BaseImpl.Xpo),所以不存在这样的限制。如果我们的BO都放到同一个程序集中,这样项目的模块化会有一定限制。XPO给出了两个解决方案,一种是在AssociationAttribute中传入程序集的名称及类型的全名(都是字符串),还有自定义XPO的元数据(在XAF中是在Module的CustomizeTypesInfo方法中进行定义的),我们的示例项目采用了后者,它更加的灵活。
我们整个示例项目的核心代码都是在CustomizeTypesInfo中,通过TypesInfo对符合条件的BO进行自定义,在运行时添加成员及Attribute。代码如下
代码中已包含了详细的注释,大家可以根据注释去了解它的工作原理。
为了能够在启动时自动收集所用到的数据字典,我们在Updater中收集了项目的所有数据字典,并将其添加到数据库中,代码如下:
关于如何引用EasyXaf.DataDictionaries,在模块章节中已进行了详细的描述,大家也可以参考示例代码
总结
数据字典示例主要是基于XAF中的业务类元数据来完成的,并且示例项目还是一个独立的XAF模块,所以它把模块与类型信息子系统的知识都涉及到了。如果你想开发独立的XAF模块,并且想广泛应用到其它项目中,业务类元数据是不可缺少的。
XAF数据字典项目地址:https://gitee.com/easyxaf/data-dictionaries
相关文章
- 一文速览 | 对话生成预训练模型
- 《云原生:运用容器、函数计算和数据构建下一代应用》
- SLAM中位姿估计的图优化方法比较
- 我是怎么用MySQL的
- 还在用分页?你out了 !试试 MyBatis 流式查询,真心强大!
- 深入分析 I/O 的工作机制
- WebClient 增删改查一文搞定
- 免费高分辨率遥感卫星数据(5m)下载
- Splunk系列:Splunk数据接入篇(二)
- mysql服务器cpu爆满解决办法
- 清理文本数据
- 分布式数据库如何平衡一致性和读写延迟?
- 通过优化 S3 读取来提高效率和减少运行时间
- MySql事务未提交导致锁等待如何解决?
- 为什么 128 KB 的魂斗罗可以实现那么长的剧情?
- 肿瘤全面分析数据库:oncomine使用介绍
- CancerSCEM | 肿瘤单细胞表达分析数据库
- 技术分享 | MySQL 如何适配 AppArmor
- 新技能GET!在前端表格中花式使用异步函数的奥义
- 量化交易中,如何快速把股票代码转换成Int整形?