Разница между размещением API модулей в монолитном приложении
Есть монолит с несколькими модулями, нужно выбрать куда помещать интерфейсы API и data structure. Есть два варианта Допустим есть два модуля module1 и module2
- Разместить API package of module1 с интерфейсами, в module1 и как бы его выставлять наружу для использованиями другими модулями а реализация будет в module1/server.
- Разместить API package of module1 с интефейсами, в модуле module2 который будет использовать эти интерфейсы, а реализация будет в module1/serer.
Какие есть плюсы и минусы и что лучше использовать?
Ответы (2 шт):
Можно вынести в третий модуль общие интерфейсы и использовать их из обоих. Тогда зависимости между двумя модулями не будут иметь значения.
Извините, но я начну по другому и ничего нового у меня нет.
В не зависимости от архитектуры так или иначе от SOLID мы далеко не уходим. Для этого вопроса нам интересны 2 последние буквы.
I - Принцип разделения интерфейса (The Interface Segregation Principle)
из него следует не создавайте больших интерфейсов (это не запрет,а принцип). Разделение интерфейса облегчает использование и тестирование модулей.
D - Принцип инверсии зависимостей (The Dependency Inversion Principle)
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Так из этих двух принципов.
Вынести интерфейсы/абстракции выше уровня модулей их использующие.
Если модули на одном уровне, то о никакой зависимости речи быть не может. Модули хранят реализации интерфейсов (классы они же детали) и зависят от абстракции (abstract class, interface). Также модули хранят абстракции (abstract class, interface) для нижних уровней.