java web design best practice
做个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