Распределенная система, объявлять интерфейс в общем модуле ИЛИ объявлять 2 одинаковых интерфейса как у поставщика, так и у потребителя?
В распределенной системе объявляйте интерфейс в общем модуле ИЛИ объявляйте 2 одинаковых интерфейса в подсистеме провайдера и потребителя, какой путь более рекомендуется?
Я работаю в распределенной системе с Apache Dubbo, и я запутался в проблеме выше. "Подсистема потребителя" (работающая в собственной JVM) может вызывать методы в "подсистеме провайдера", если интерфейс этих методов зарегистрирован в Dubbo. Итак, сервис Dubbo основан на интерфейсе, у меня есть 2 варианта:
- Объявите интерфейс, скажем
MyDubboService
в общем модуле, скажем,my-comm
, и добавитьmy-comm
как библиотека зависимостей в "подсистеме потребителя" и "подсистеме провайдера". Затем внедрите и зарегистрируйтеMyDubboService
(Dubbo) в "подсистеме провайдера". - декларировать
MyDubboService
в "подсистеме потребителя" и "подсистеме провайдера" два раза, затем внедрить и зарегистрироватьMyDubboService
(Dubbo) в "подсистеме провайдера".
Моя команда приняла вариант № 2 в качестве стратегии, но, на мой взгляд, вариант № 1 лучше, потому что эти преимущества:
- Гарантируйте, что интерфейс точно такой же с обеих сторон
- Избегайте дублированного кода.
- Выглядит более элегантно
Я понимаю, что вариант № 1 также имеет дефект, например, "открыл некоторые бесполезные методы для потребителя, который может не заинтересовать потребителя"
Так что я хочу знать, какой вариант лучше, или сказать, как мы решаем, какой путь выбрать, вариант № 1 или № 2?
Любые комментарии приветствуются, спасибо!