@Service - это класс. Он может иметь много методов, и каждый контроллер будет вызывать нужный. В каждом будет делаться своя, уникальная часть, а сохраниен пойдет через общий метод. Например
// В Андроид контроллере
service.processAndroidLink(link)
// В iOS контроллере
service.processMacLink(link)
// в самом сервисе будут такие методы:
public void processAndroidLink(URL link) {
// подготавливаем данные для записи
URL androidLink = link;
URL iosLink = createIosLink(link);
URL webLink = createWebLink(link);
var doc = prepareDocument(andriodLink, iosLink, webLink);
save(doc);
}
public void processWebLink(URL link) {
// подготавливаем данные для записи
URL androidLink = createAndroidLink(link);
URL iosLink = createIosLink(link);
URL webLink = link;
var doc = prepareDocument(andriodLink, iosLink, webLink);
save(doc);
}
private void save(document) {сохраняем в MongoDB}
}
Понятно, что вместо
URL
может быть любой другой тип.
Обрати внимание, что метод сохранения разделен с prepareDocument: так проще тестировать, у них разные области видимости и в будущем prepareDocument может быть использован кем-то еще.
В данном случае я намеренно обошел стороной вопрос проверки существования ссылки. Возможно, ты захочешь сделать это отдельным процессом. Возможно, встроишь в processAndroidLink.