По-моему, тут очевидный 1 вариант, выпилить с проекта города в отдельную сущность, со своим api, и отдавать города и адреса.
Во втором и третьем варианте, сразу видится проблема DRY, если в нескольких контекстах повторяются города и методы для них.
Вообще это азы... вроде как... хотя может только и для меня, но если у вас в проекте, что-то повторяется в нескольких местах, то это нужно вынести в отдельную сущность, работать как с отдельным модулем со своим API. Проще написать единое API, для всех городов и обработчик внутри каждого домена которому нужна эта сущность, и дополнять по необходимости, чем реализовывать одно и тоже в каждом.