背景:
兩個實體類:租房圖片、售房圖片
這兩個表用於存儲房源圖片記錄,一個房源對應多個圖片,兩個表的差別就在於一個業務關聯字段。
租房圖片中的RentID記錄這個圖片屬於哪個租房信息;
售房圖片中的SaleID記錄這個圖片屬於哪個售房信息。
聲明:這是二次開發,表結構不是我設計的。
因為兩個實體類的操作極為相似,我們可以提取出來一個接口,進行統一操作。這里只有兩個實體類,可能優勢不明顯,但如果有八個十個呢?
現在XCoder新模版(2012年3月以后)生成的實體類都是分部類,都對應有一個分部實體接口。
由於XCode是充血模型,我們可以為這兩個實體類做一個統一的基類來達到我的目的,但是這個統一的基類里面無法訪問子類的字段,編碼上很不方便。
這一次,我們用分部接口!
先來看看這兩個實體類
這兩個實體類,就RentID和SaleID字段的不同,其它都一樣,包括名字、類型、業務意義。
我們新建一個接口,然后借助分部接口來統一
如上,通過分部接口,我們無需修改原有的接口文件,即可實現給接口多增加一個繼承。
實際上也不應該修改原有的接口文件,因為原有的接口位於實體類的數據類文件中,那是隨時會被新的代碼生成覆蓋。
IHouseImage接口里面的屬性,是從IRentimage里面拷貝過來,然后刪掉RentID
如果不要那個BizID,那么我們的工作就算完成了,不需要對原有的實體類代碼進行任何修改。
只是還有一點遺憾,不能通過接口操作RentID和SaleID。
我們來擴展一下,增加一個BizID屬性來統一它們,因為兩個實體類都沒有這個屬性的實現,所以我們需要在實體類業務文件那里手工增加實現。
大功告成!我們看看怎么用它們。
如上,根據不同的類型,創建實體操作者eop。我這里的類型是硬編碼,也可以根據業務情況采用別的方式得到類型。
實體操作者eop表現了事務管理、創建實體entity的操作。
實體entity是IEntity類型,可以進行添刪改等操作。這里為了實體接口的精簡和獨立,實體接口並沒有繼承IEntity,實際上實體類都繼承了這兩個接口。
所以,我們可以先轉為IHouseImage接口,然后隨意操作,當然你也可以在接口中增加各種方法。
好了,結束了!