Whats the difference between hierarchical exports direct assignment and hierarchical exports assign through connect?

uvm_analysis_port #(apb_seq_item) ap;
apb_monitor m_monitor;
ap = m_monitor.ap; // direct assignment

//OR

m_monitor.ap.connect(ap); // assignment through connect

Reference: UVM Cookbook Page Number 47
Whats the difference between the assignments?
Which method should we follow?

In reply to Mayur Chaudhari:

The first method just points two handles of analysis port to same port object. It does not “connect” the ports in a UVM way. Ideally the connect method should be followed. It will populate all the internal arrays of UVM BCL while connecting and resolving the binds. The “m_provided_to” and “m_provided_by” arrays will get populated and fan out of each port will be monitored.

m_monitor.ap.connect(ap); // assignment through connect

This method guarantees the port connection rules check and will throw an run-time error if connection rules are not followed. Moreover, it gives more clarity in design connections.