java dao与dto_java – DTO,DAO还是服务层?

我的应用程序基于典型的3层体系结构,目标是创建一个

SpringMVC站点和一个

Spring Batch解决方案,该解决方案可以提供和维护我们数据库的产品和库存,其中速度是一个非常重要的因素.

我正在使用Spring的JdbcTemplate来管理遗留数据库.我的一些表包含许多我不使用的列,并且由于某些字段的大小(我们甚至不需要映射的blob),检索整行显示了负面影响,所以我创建了一些与之匹配的bean我想要检索的列,例如:

> Product – 包含与DB中存储的字段的1:1关系.

> ProductDetailsView – 包含id,名称,价格,描述,股票.

> ProductListItemView – Id,价格,名称,股票.

DAO层将这些bean返回给服务层.创建DTO以在我的产品服务界面中公开它的AFAIK可能有意义,但是,

1)ProductDetailsView和ProductListItemView怎么样?

2)我应该从这些“视图”或“投影”到具有相同属性的DTO进行1:1映射吗?为什么?

3)在任何情况下,你会在哪里放置JSR-303注释来验证网络的输入?

最佳答案 通常,DTO的使用是由于将实体与视图分离,然后数据库中的任何内部更改都不会影响视图或客户端,并且视图根本不需要更改.除非您需要发送更多或不同的信息.但是您没有使用JPA,而是使用jdbctemplate,因此您的对象可以立即作为DTO执行,因为您不依赖于数据库模型.

对于Product实体,似乎创建DTO是一种很好的方法,因为您的视图对象只是存储在数据库中的整个对象的部分表示.

>我看到ProductDetailsView和ProductListItemView中有最小数量的列,(可能你只是放了一个集合),如果你认为你在表的定义上没有太大的变化,因为它们不是那么大你可以使用实体对象就像休息库方法一样.

>预测也是一种不同的方法来解决相同的要求,避免向视图发送无关紧要的信息,但您将在同一个POJO中包含jackson注释和jpa注释. (当您使用ORM时更多).人们不喜欢这么多,这就是创建DTO的方法

>通常JSR303注释属于’input’对象,只要它们到达控制器就会检查,你可以使用与Springmvc和jsr一起使用的@Validated注释,这在属于你的端点的方法中使用.

我认为没有黄金法则,但我会尝试尽可能地分离数据库层的视图.当您使用jdbcTemplate时,您不必担心带来整个表示或者表的急切/懒惰集合有问题,因为您始终可以修改投影以使用获取您将使用的内容.考虑从DAO带来您将发送到视图的DTO,并将其用作CRUD操作中的输入对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值