【发布时间】:2016-01-27 07:40:01
【问题描述】:
这是一个让我困惑的设计问题。
如您所知,对象由属性和行为组成。在 Web 编程中,我已经实现了几个协议对象作为 DTO。这些就像:
abstract AbstractRequest{
public abstract AbstractResponse apply();
...
}
MathLessonRequest extends AbstractRequest{
public AbstractResponse apply(){
..do something based on request
}
...
}
HistoryLessonRequest extends AbstractRequest{
public AbstractResponse apply(){
..do something based on request
}
}
而我想做的是,在我的控制器中,我只想做这样的事情:
@RestController
class SchoolRequestController{
@RequestMapping(value="/",method = RequestMethod.POST, produces = "application/json")
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public AbstractResponse query(AbstractRequest request){
return request.apply();
}
}
所以,正如你所看到的,我想让 Request 类负责执行他们所要求的所有内容。
我的问题是,这是一个好的设计吗?赋予 DTO 对象执行其用途的责任是否正确?还是 DTO 对象仅用于数据传输?
PS:这个设计有一个问题,apply方法需要一些其他对象的外部引用,比如services,dao等。那么将这些依赖注入到这个实例中的优雅方法是什么?
【问题讨论】: