我開發包含幾個層的應用程序。我們有返回模型對象的DAO層。我們也有映射器實例化DTO對象並將它們發送給客戶端。實體映射到控制器層中的DTO。我在幾個實體類中引入了繼承。讓我們假設在圖像某事像下面多態性和DTO對象創建
class diagram (not enough reputation points to past image directly)
我問DAO動物的名單從具體的動物園。然後我得到List動物列表,但它們是具體的類型,因爲動物是抽象的,我們不能在數據庫中擁有Animal。我想從這個模型對象創建DTO。我不得不使用映射器在我,如果.. else語句檢查每個動物的類型,然後創建適當的DTO,某事像
if (animal instanceof Dog) {
.. create dog dto
} else if (animal instance of Cat) {
.. create cat dto
} .. and so on
此代碼不會好看。使用多態性並在每個動物上調用某種方法來生成DTO會很好,但在域模型中創建DTO對象的邏輯僅用於通信是不好的。你如何解決這種情況?
編輯: 更具體地講,我希望能有像DTO 1 其中DogDTO只包含字段的顏色和名稱 2 FishDTO只包含numberOfFins 沒有一個大AnimalDTO與所有可能的屬性
它們相當容器。你是否推薦使用'instanceof'邏輯並按類型創建適當的DTO? – soulcoder
我個人並不認爲這有什麼問題。我添加了一個例子。 –
目前我有幾乎相同的解決方案,因爲你已經發布。但是我想以更好的方式做到這一點,以避免在添加新的動物類型和新的DTO類型時添加新的instanceof案例和類型檢查。我想了一會兒,創建了一些工廠,使用instanceof似乎是最好的方法。完美的是迭代動物列表並調用一些接口/抽象方法來創建適當的DTO。 – soulcoder