Я реализую серию микро-сервисов REST на Java - назовем их «адаптерами».
Каждый сервис читает данные из определенного типа источника и предоставляет результат тем же способом.Основная идея состоит в том, чтобы иметь одинаковый интерфейс (сервисный контракт) для всех них, чтобы получить взаимозаменяемость.Я хотел бы избежать дублирования кода и повторно использовать сервисный контракт на услуги.
И, похоже, я заново изобретаю колесо.Существует ли стандартный подход для этого?
Я попытался извлечь контракт на обслуживание в виде интерфейса Java для класса Spring MVC Controller и сопровождающего его класса DAO CustomObject
:
public interface AdapterController {
@RequestMapping(method = RequestMethod.GET, value = "/objects/{name}")
CustomObject getObject(@PathVariable final String name);
}
Затем поместитеих в отдельный проект Maven, установите его как зависимость в исходном проекте и переписали класс контроллера REST следующим образом:
@RestController
public class DdAdapterController implements AdapterController {
@Override
public CustomObject getObject(String name) {
return model.getByName(name);
}
Я также могу повторно использовать объект DAO в клиентском коде, но класс интерфейсабесполезен на стороне клиента.
1) Подводя итоги: можно ли повторно использовать / разделять сервисный контракт между различными реализациями сервисов?Какова стоимость этого?Есть ли лучшая практика, как делиться контрактом на обслуживание?
2) Следующий вопрос о контракте на обслуживание и потреблении клиента.Можно ли разделить договор между сервисом и клиентом?Есть ли в Java какие-нибудь инструменты / подходы для этого?