In reply to abdus_k:
From The UVM Cookbook:
An alternative methodology for running virtual sequences is to use a virtual sequencer, which is a uvm_sequencer which contains the handles for the target sequencers. In this methodology, the virtual sequence is started on the virtual sequencer and it gets the handles for the target sequencers from the virtual sequencer. The limitation of this approach is that it is a fixed implementation which is very tightly coupled to the local hierarchy of an env and this adds complications with vertical reuse.
Essentially, both methods require about the same amount of code, but the virtual sequenceR method requires much more foreknowledge about the hierarchical structure of the environment. Just using the virtual sequence is more reusable.