К чему создаётся интерфейс для сервис-класса?

Используя фреймворки Spring, принято для создания сервиса создать интерфейс определяющий основные методы сервиса.

interface MultiplicationService {
    long execute(int a, int b);
}

class MultiplicationServiceImpl implements MultiplicationService {
    // implementation
}

В чём смысл создания интерфейса?


Ответы (3 шт):

Автор решения: Sergey Zh.

Во-первых, как заметили в чате, это упращает тестирование. Меньшая связность позволяет легко поменять реализацию.

А во-вторых, в спринге можно инжектить бины по интерфейсу так же, как и обычные pojo классы (но требуется, чтобы спринг мог однозначно определить какой бин следует инжектить, иначе - кинет исключение). В этом плане смысл такой же как и в java core.

→ Ссылка
Автор решения: Sergey Mitrofanov

Если имплементация сервиса одна и только одна и в будущем не планируется других реализаций, то можно и не париться по поводу интерфейса.

Главное не попасть в ситуацию когда мы сделали сервис без интерфейса, а потом резко захотели сделать еще одну и добавили интерфейс. Вот в этом случае может измениться поведение, так как интерфейсные сервисы поднимаются через прокси.

Более глубокое копание в этом направлении можно почитать тут.

По этому многие просто используют правило - не хочешь неожиданностей в будущем - делай интерфейс :)

→ Ссылка
Автор решения: MxWild

Весь смысл в полиморфизме. Ваш интерфейс можно реализовать по разному. Но для того, чтобы не писать одно и то же в каждом классе, название методов выносят в интерфесй. А затем реализуют их так, как нужно в каждом из случаем.

→ Ссылка