NewLife.XCode中如何借助分部抽象多个具有很多共同字段的实体类
2012-04-27 09:57
531 查看
背景:
两个实体类:租房图片、售房图片
这两个表用于存储房源图片记录,一个房源对应多个图片,两个表的差别就在于一个业务关联字段。
租房图片中的RentID记录这个图片属于哪个租房信息;
售房图片中的SaleID记录这个图片属于哪个售房信息。
声明:这是二次开发,表结构不是我设计的。
因为两个实体类的操作极为相似,我们可以提取出来一个接口,进行统一操作。这里只有两个实体类,可能优势不明显,但如果有八个十个呢?
现在XCoder新模版(2012年3月以后)生成的实体类都是分部类,都对应有一个分部实体接口。
由于XCode是充血模型,我们可以为这两个实体类做一个统一的基类来达到我的目的,但是这个统一的基类里面无法访问子类的字段,编码上很不方便。
这一次,我们用分部接口!
先来看看这两个实体类
这两个实体类,就RentID和SaleID字段的不同,其它都一样,包括名字、类型、业务意义。
我们新建一个接口,然后借助分部接口来统一
如上,通过分部接口,我们无需修改原有的接口文件,即可实现给接口多增加一个继承。
实际上也不应该修改原有的接口文件,因为原有的接口位于实体类的数据类文件中,那是随时会被新的代码生成覆盖。
IHouseImage接口里面的属性,是从IRentimage里面拷贝过来,然后删掉RentID
如果不要那个BizID,那么我们的工作就算完成了,不需要对原有的实体类代码进行任何修改。
只是还有一点遗憾,不能通过接口操作RentID和SaleID。
我们来扩展一下,增加一个BizID属性来统一它们,因为两个实体类都没有这个属性的实现,所以我们需要在实体类业务文件那里手工增加实现。
大功告成!我们看看怎么用它们。
如上,根据不同的类型,创建实体操作者eop。我这里的类型是硬编码,也可以根据业务情况采用别的方式得到类型。
实体操作者eop表现了事务管理、创建实体entity的操作。
实体entity是IEntity类型,可以进行添删改等操作。这里为了实体接口的精简和独立,实体接口并没有继承IEntity,实际上实体类都继承了这两个接口。
所以,我们可以先转为IHouseImage接口,然后随意操作,当然你也可以在接口中增加各种方法。
好了,结束了!
两个实体类:租房图片、售房图片
这两个表用于存储房源图片记录,一个房源对应多个图片,两个表的差别就在于一个业务关联字段。
租房图片中的RentID记录这个图片属于哪个租房信息;
售房图片中的SaleID记录这个图片属于哪个售房信息。
声明:这是二次开发,表结构不是我设计的。
因为两个实体类的操作极为相似,我们可以提取出来一个接口,进行统一操作。这里只有两个实体类,可能优势不明显,但如果有八个十个呢?
现在XCoder新模版(2012年3月以后)生成的实体类都是分部类,都对应有一个分部实体接口。
由于XCode是充血模型,我们可以为这两个实体类做一个统一的基类来达到我的目的,但是这个统一的基类里面无法访问子类的字段,编码上很不方便。
这一次,我们用分部接口!
先来看看这两个实体类
这两个实体类,就RentID和SaleID字段的不同,其它都一样,包括名字、类型、业务意义。
我们新建一个接口,然后借助分部接口来统一
如上,通过分部接口,我们无需修改原有的接口文件,即可实现给接口多增加一个继承。
实际上也不应该修改原有的接口文件,因为原有的接口位于实体类的数据类文件中,那是随时会被新的代码生成覆盖。
IHouseImage接口里面的属性,是从IRentimage里面拷贝过来,然后删掉RentID
如果不要那个BizID,那么我们的工作就算完成了,不需要对原有的实体类代码进行任何修改。
只是还有一点遗憾,不能通过接口操作RentID和SaleID。
我们来扩展一下,增加一个BizID属性来统一它们,因为两个实体类都没有这个属性的实现,所以我们需要在实体类业务文件那里手工增加实现。
大功告成!我们看看怎么用它们。
如上,根据不同的类型,创建实体操作者eop。我这里的类型是硬编码,也可以根据业务情况采用别的方式得到类型。
实体操作者eop表现了事务管理、创建实体entity的操作。
实体entity是IEntity类型,可以进行添删改等操作。这里为了实体接口的精简和独立,实体接口并没有继承IEntity,实际上实体类都继承了这两个接口。
所以,我们可以先转为IHouseImage接口,然后随意操作,当然你也可以在接口中增加各种方法。
好了,结束了!
相关文章推荐
- NewLife.XCode 上手指南(四) 级联操作
- 一个表的两个字段具有相同的类型。如何仅用SQL语句交换这两列的数据?
- 【总结】Newlife XCode组件资源目录汇总【2013年版】
- 挑战ORM性能——Newlife.XCode下500万sqlite数据库的分页
- NewLife.Xcode组件资源目录
- Hibernate实体类注解中如何忽略某些字段的映射
- MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题
- Newlife XCode组件资源目录汇总【2013年版】
- Oracle免客户端For .Net(只为用NewLife.XCode开发Oracle的同学服务)
- Hibernate实体类注解中如何忽略某些字段的映射
- 挑战ORM性能-Newlife.Xcode下500万sqlite数据库的分页【附Xcode源码,坚持10年的ORM,机会难得】
- NewLife.XCode 上手指南
- 如何配置Hibernate 中的表实体类 与 表字段的配置不一样
- Oracle数据库中,如何给已有很多数据的表填充自增序列字段
- mybatis 中如何映射实体类和表名首先:最好把实体类里面的变量名称和表里面字段写成一致。 然后:在SqlMapConfig.xml中 <typeAliases> <typeAlias alias
- NewLife.Xcode 上手指南(三) 扩展属性的使用
- [转载]NewLife XCode 数据映射框架
- 【总结】Newlife XCode组件资源目录汇总【2013年版】
- NewLife.XCode组件资源目录