В более идеальном мире у вас для каждого контроллера будет свой xib, в котором будет собственно и происходить layout. Такой подход отлично решает проблему мержей сторибордов.
В итоге мы отказываемся от стринговых констант (viewControllerID). И тогда создание нового контроллера будет выглядеть вот так:
let vc = MyViewController()
Этот подход в свою очередь подталкивает нас к Dependency Injection.
В итоге получаем удобное:
let vc = MyViewController(dependency1: Dependency1, dependency2: Dependency2, ...)
Но если зависимостей больше 2-3, то их удобнее выводить в отдельный settings-класс/структуру:
let settings = MyViewController.Settings(<here init>)
let vc = MyViewController(with: settings)
В итоге смысла держать любую ссылку на контроллер нет.