Well for your first question, the right way would be to use
.filters() on each visualization since they will do only one request per visual including the filters the first time they load. You still have to use
.setFilters() to keep the Filter Control in sync. If you use
.applyFilters() all visuals will query the server initially with no filters and immediately a second query will be triggered to then filter the visuals.
About your second question, there are two main reasons. The first one is that the specialty of the FC (which by the way will be renamed to Interaction Manager in next releases) is to handle filters, so it would be too generic and maybe confusing, that’s why we have
removeFilters… and other methods with more explicit and intuitive names. The second reason is that most of the time filters are only set (at load time) in the FC and not triggered from there to avoid additional queries as specified in my first response, and you always have
applyFilters to do it if you really need to.