Coverage collector or subscriber usage

Hi all,

I am trying to undestand best approach to write or build coverage collector.

Case1 : coverage collector is a part of uvm_agent.
Inside agent code, we should be having one analysis_port which is used to connect monitor output to coverage collector export.
With this approach, total we require two analysis ports one by default in monitor and one in agent.

Case2 : coverage collector is a part of uvm_environment
only one analysis port inside monitor, then in connect phase of env, we will connect the monitor output to cov collector export.
With this approach, total number of analysis port is only one.

What are the advantages or any limitions in the above cases? May I know the recommendation to use coverage collector, it should be inside agent or env?

Thank You,