Why do we need virtual interfaces in system verilog?

Thanks for your inputs guys. All of them are helpful.
I like what Dave said regarding the disadvantage of using dotting to drive a signal. I was using that before in my testcase, test.env.agt.drv.signal <= 1’b1. But now I think I should not since the test will not become reusable.