Не уверен, какой подход выбрать для классов проектирования.
public interface AuthoringEvent {
ProcessingResultEvent authoringEvent(Event data);
}
Абстрактный класс AbstractAuthoringEvent реализует интерфейс
public abstract class AbstractAuthoringEvent implements AuthoringEvent {
@Override
public ProcessingResultEvent authoringEvent(Event data) {
ResponseEntity<Event> resultData = callService(data);
etc...
}
protected abstract ResponseEntity<Event> callService(Event requestData);
}
Класс AuthoringEventIT расширяет абстрактный класс
public class AuthoringEventIT extends AbstractAuthoringEvent {
@Autowired
private RESTClient restClient;
protected ResponseEntity<Event> callService(Event requestData) {
return restClient.callWebServiceWithAction(url, httpPostMethod, requestData, Event.class);
}
Класс конечной точки ресурса
@Autowired
private AuthoringEventIT authoringEventIT;
@PostMapping()
public ResponseEntity<Event> authorEvent(@RequestBody final EventRequest request) {
ProcessingResultEvent responseData = authoringEventIT.authoringEvent(request);
return responseData.getProcessedData();
}
l имеет еще 2 такие же реализации, как классы модели Event for Venue и Organization.Я знаю, что могу удалять интерфейсы и делать все на уровне абстрактных классов, которые все конкретные классы реализуют для своих собственных целей, как это делается в AuthoringEventIT.class, но мой вопрос ...
Нужно ли отдельным абстрактным классаминтерфейсы для реализации?Может быть, все 3 абстрактных класса могут реализовать в одном интерфейсе Authoring какой-то универсальный метод, но как избежать реализации в конкретном классе, например AuthoringEventIT, который расширяет абстрактный класс и необходимо снова реализовать метод интерфейса, который уже реализован в абстрактном классе?Большое спасибо ...