【发布时间】:2020-11-22 07:13:26
【问题描述】:
我有自己的服务调用第三方 rest 服务,该服务返回基于文本的响应。此基于文本的响应不是正确的服务响应,需要解析内容和错误。出于讨论的目的,假设第 3 方休息服务不能更改。
鉴于这些情况,我想知道是否应该将该解析连接到应用程序的 dao 层或服务层。我知道服务层应该包含您的所有业务逻辑,但我觉得如果我不这样做在我泄漏的 Dao 层中进行解析。在这种情况下,是否可以在 dao 中包含用于解析/转换的逻辑,还是应该在服务层中完成?
感谢任何建议。
public void MyDao {
private RestTemplate restTemplate;
private ResponseParser responseParser;
public myDao(RestTemplate restTemplate, ResponseParser responsePaser){
this.restTemplate = restTemplate;
this.responseParser = responseParser;
}
public MyResponse sendRequest(MyRequest myRequest){
ResponseEntity<String> responeEntity = restTemplate.exchange(...);
String body = responseEntity.getBody();
return responseParser.parse(body);
}
}
或
public void MyDao {
private RestTemplate restTemplate;
public myDao(RestTemplate restTemplate, ResponseParser responsePaser){
this.restTemplate = restTemplate;
}
public String sendRequest(MyRequest myRequest){
ResponseEntity<String> responeEntity = restTemplate.exchange(...);
return responseEntity.getBody();
}
}
public void MyService {
private MyDao myDao;
private ResponseParser responseParser;
public myDao(MyDao myDao, ResponseParser responsePaser){
this.myDao = myDao;
this.responseParser = responseParser;
}
public MyObject process(MyRequest myRequest){
String response = myDao.sendRequest(myRequest)
return responseParser.parse(response);
}
}
【问题讨论】:
-
对您问题的每一个答案肯定都是基于与个人程序员偏好相关的意见。因此,在我看来,由于单一职责原则,单独的解析逻辑更好。
-
对于 SRP,它声明一个类应该只有一个改变的理由。我会说在 dao 中包含解析是可以的,因为如果其余响应的格式发生变化,您将需要更改它的解析方式。因此它们本质上是耦合的,不是吗?
标签: java spring spring-boot architecture dao