zoukankan      html  css  js  c++  java
  • NewLife.XCode中如何借助分部抽象多个具有很多共同字段的实体类

    背景:

    两个实体类:租房图片、售房图片

    这两个表用于存储房源图片记录,一个房源对应多个图片,两个表的差别就在于一个业务关联字段。

    租房图片中的RentID记录这个图片属于哪个租房信息;

    售房图片中的SaleID记录这个图片属于哪个售房信息。

    声明:这是二次开发,表结构不是我设计的。

     

    因为两个实体类的操作极为相似,我们可以提取出来一个接口,进行统一操作。这里只有两个实体类,可能优势不明显,但如果有八个十个呢?

    现在XCoder新模版(2012年3月以后)生成的实体类都是分部类,都对应有一个分部实体接口。

    由于XCode是充血模型,我们可以为这两个实体类做一个统一的基类来达到我的目的,但是这个统一的基类里面无法访问子类的字段,编码上很不方便。

    这一次,我们用分部接口!

     

    先来看看这两个实体类

    HZ(`6S)[@XA`7(G52XICO2V4~P2`95HG[NH}Q$@02M`%PV

    这两个实体类,就RentID和SaleID字段的不同,其它都一样,包括名字、类型、业务意义。

     

    我们新建一个接口,然后借助分部接口来统一

    $Y%A1CR697UA67[`WWRKJ88

    如上,通过分部接口,我们无需修改原有的接口文件,即可实现给接口多增加一个继承。

    实际上也不应该修改原有的接口文件,因为原有的接口位于实体类的数据类文件中,那是随时会被新的代码生成覆盖。

    IHouseImage接口里面的属性,是从IRentimage里面拷贝过来,然后删掉RentID

    如果不要那个BizID,那么我们的工作就算完成了,不需要对原有的实体类代码进行任何修改。

     

    只是还有一点遗憾,不能通过接口操作RentID和SaleID。

    我们来扩展一下,增加一个BizID属性来统一它们,因为两个实体类都没有这个属性的实现,所以我们需要在实体类业务文件那里手工增加实现。

    NN`ZDJSY(FCF]N%~R%$1HST

    J(S`U{DBNSE{PP`L]XNEI(F

     

    大功告成!我们看看怎么用它们。

    7Q4O)MQ2Z%`Z8~(E`29BRCP

     

    如上,根据不同的类型,创建实体操作者eop。我这里的类型是硬编码,也可以根据业务情况采用别的方式得到类型。

    实体操作者eop表现了事务管理、创建实体entity的操作。

    实体entity是IEntity类型,可以进行添删改等操作。这里为了实体接口的精简和独立,实体接口并没有继承IEntity,实际上实体类都继承了这两个接口。

    所以,我们可以先转为IHouseImage接口,然后随意操作,当然你也可以在接口中增加各种方法。

     

    好了,结束了!

  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/nnhy/p/2473052.html
Copyright © 2011-2022 走看看