【发布时间】:2015-08-12 05:22:18
【问题描述】:
我开发的应用程序包含几层。我们有返回模型对象的 DAO 层。我们还有映射器实例化 DTO 对象并将它们发送给客户端。实体映射到控制器层中的 DTO。我在几个实体类中引入了继承。让我们假设如下图所示
class diagram (not enough reputation points to past image directly)
我向 DAO 询问具体动物园的动物名单。然后我得到列表列表动物,但它们是具体类型,因为动物是抽象的,我们不能在数据库中只有动物。我想从这个模型对象创建 DTO。我必须使用我有 if .. 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. 仅包含 numberOfFins 的 FishDTO 不是一个具有所有可能属性的大型 AnimalDTO
【问题讨论】: