我开发包含几个层的应用程序。我们有返回模型对象的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