java web design best practice

herowach 2016-10-13 10:49:56
做个demo的时候遇到几个疑问,想听听大家是怎么做的。技术栈暂定为 前端UI框架+Spring MVC+ pure jdbc/Mybatis;分层为UI + Controller + service + dao

举例:
有一个User表(id, name....)和一个Post(id, userId, subject...)表, 主要实现增删改查:

UserController--->UserService--->UserDao
PostController--->PostService--->PostDao

关于VO:
1. 表单提交的VO和记录显示的VO不一致时,需要创建两个VO吗?还是直接就用Map?(这里的VO主要是Controller里映射后接收/返回的对象)
例如: 提交时只有user的信息,而列表显示时是多表混合的信息,且肯定不会有password等字段。

2. 用户新增的信息被封装到UserVO给到Controller->service,在service 给到 dao的时候,有必要转成一个属性一样的User(model?)/UserDTO(dto?)在传过去吗?
如果不转,当VO与表里字段不一致时怎么办(例如一个VO同时包含几个表的信息)

关于数据合并:
要在列表里同时显示User和post的信息, 应该在哪里合并数据:
1.直接通过sql查出合并后的数据直接返回, 但感觉这样dao就涉及到业务逻辑了;
2.在service层里分别查出User和Post的信息,程序合并成Map/VO返回给Countroller


关于业务异常:
service层遇到业务异常一般应该怎么通知Countroller? 抛出一个自定义的异常(checked or unchecked?) 或者返回一个特定值(例如null)?
举例: findById(id) : 用户没找到,抛异常还是return null
deleteUser(id) : 发现id是管理员,禁止删除,怎么通知Controller
...全文
344 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
herowach 2016-10-14
  • 打赏
  • 举报
回复
CSDN 现在好冷清啊,现在都在哪个上面交流呢? 知乎?
yiguanyagao 2016-10-13
  • 打赏
  • 举报
回复
1 建议(发现id是管理员,禁止删除,怎么通知Controller ),如果是管理员返回一个标记,比如:“admin”,页面删除数据一般用ajax 2 要在列表里同时显示User和post的信息, 应该在哪里合并数据:业务逻辑全部写在service解决,controller只是跳转,传值 3 关于VO: mybities可以接受map,你想用哪些数据直接使用就可以了
yiguanyagao 2016-10-13
  • 打赏
  • 举报
回复
关于业务异常:1,建议(用户没找到,抛异常还是return null),返回null
yiguanyagao 2016-10-13
  • 打赏
  • 举报
回复
我觉得你想的有点复杂,业务异常,这就是你逻辑错误,做项目之前一定将需求了解透
herowach 2016-10-13
  • 打赏
  • 举报
回复
引用 2 楼 yiguanyagao 的回复:
1 建议(发现id是管理员,禁止删除,怎么通知Controller ),如果是管理员返回一个标记,比如:“admin”,页面删除数据一般用ajax 2 要在列表里同时显示User和post的信息, 应该在哪里合并数据:业务逻辑全部写在service解决,controller只是跳转,传值 3 关于VO: mybities可以接受map,你想用哪些数据直接使用就可以了
delete 操作返回值一般都是void,不会返回的,返回boolean也不好,错误信息丢失了;感觉因为业务逻辑失败肯定抛异常,但一般抛checked 还是unchecked异常, 另外就是什么情况下算业务异常,user/post not found这种到底算不算 我知道可以用map,最灵活,既可以当VO也可以当TO,但感觉这样不好,语意没了,并且类可以提供一些简单内聚处理。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧