Дизайн шаблона для DTO
У меня есть веб-приложение, использующее JDBC для вызовов базы данных. У меня есть сервис, dto и dao layer. У меня есть запрос XML, который огромен. Могу ли я передать объект запроса в метод dao или я должен передать запрос в модель dto, а затем передать объект dto в качестве параметра моему методу dao? Какой правильный подход?
public TestServiceClass addSurveySubmitDetails(TestRequestXML testRequestXML){
//call to dao method
TestDao = testdao = new TestDao(testRequestXML);
}
OR
public TestServiceClass addSurveySubmitDetails(TestRequestXML testRequestXML){
//create dto object
TestDTO testDTO = new TestDTO();
testDTO .setId(testRequestXML);
//call to dao method
TestDao = testdao = new TestDao(testDTO );
}
Какой правильный подход?
4 ответа
Я не думаю, что есть правильный или неправильный ответ. На мой взгляд, это довольно субъективно.
Но лично мне нравится иметь тонкий слой между контроллерами и сервисами (при условии, что вы используете шаблон MVC), что его единственной задачей является преобразование запросов (XML, Json и т. Д.) В объекты домена.
Это очень полезно, когда у вас есть сложные доменные объекты или агрегаты, из которых вам нужно показать информацию в представлении.
Это зависит от вашей архитектуры, но как DTO Data Transfer Object
нет никакой причины использовать их между слоями сервиса и дао.
Вы можете иметь один для сервисного уровня, как я полагаю, как в примере кода ниже, но в любом случае это зависит от архитектуры вашего приложения.
public TestServiceClass addSurveySubmitDetails(TestDTO testDTO){
TestRequestXML testRequestXML = testDTO.getId();
TestDao = testdao = new TestDao(testRequestXML);
}
Подробнее о DTO
DTO действительно предназначены для удаленных звонков. Если вы отправляете данные по сети на другую виртуальную машину, используйте DTO. Если вы отправляете данные в другой локальный класс на той же виртуальной машине, не беспокойтесь о DTO. DTO - это просто эффективный способ удаленной передачи данных. Это не имеет никаких преимуществ в другом месте.
YAGNI - хорошая идея, по возможности придерживайтесь простого дизайна