Это вопрос дизайна, который меня смущает.Добавление поведения к объекту DTO
Как вы знаете, объект состоит из атрибутов и поведения. В веб-программировании я реализовал несколько объектов протокола как 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();
}
}
Итак, как вы можете видеть, я хочу дать запрос классы отвечают за выполнение всего, о чем они просят.
Мой вопрос: хороший дизайн? Правильно ли предоставлять объектам DTO обязанности выполнять то, для чего они предназначены? Или объекты DTO предназначены только для передачи данных?
PS: В этом дизайне возникает проблема, которая требует применения некоторых внешних ссылок на некоторые другие объекты, такие как службы, dao и т. Д. Итак, какой элегантный способ вставить эти зависимости в эти экземпляры?
Основываясь на принципах OO, это так.Но, например, в методе apply, я хочу читать данные из db, поэтому мне нужно передать dao-экземпляр в метод, но он не выглядит элегантным. Я могу сделать это как apply (OuterDataDao dao), но это не дает мне гибкости для ввода объектов, которые мне нужны в разных дочерних классах. потому что метод apply является абстрактным и уже определяется как подпись :( – Neron
Привет @Neron, см. редактирование. – Augusto
@Augusto _ "очень простая логика преобразования, такая как возвращение возраста человека с даты рождения" _ Я думаю, что даже такого рода простой логики не должно быть. Сериализация или маршалинг может быть нигммаром, когда есть логика внутри DTO. Я бы пошла на полную «теорию разбитых окон» на этом. –