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