while I mostly agree with the previous answers, I would like to write some words about those solutions and write, why I prefer a good data layer instead of direct call rules.
first, lets have a look at the two solutions:
direct call rules with additional parameters
direct call rules are very useful, since you can just trigger a specific rule in Adobe Launch and providing additional information (parameters). this additional data can then be used within the rules to set the Adobe Analytics variables/events just as needed.
additionally read great articles from jennkunz Direct Call Rules in Launch have a new power: passing additional info in _satellite.track - 33 Stick... or jexnerW4D https://webanalyticsfordevelopers.com/2018/09/18/quick-tip-passing-data-into-launch-rules/
data layer with event information
in this case the website doesn't call Adobe Analytics directly, it just writes information to a javascript object (or something similar). from there Adobe Launch can pickup the values as needed and trigger rules, similar to the direct call rules above.
there has been a big discussion recently by several experts, eg. Jim Gordon https://jimalytics.com/governance/you-need-a-data-layer/
and Search Discovery offers a handy extension to work with event-driven data layers (stewarts16448458) https://www.searchdiscovery.com/solutions/partners/adobe/adobe-launch/data-layer-manager/
my preference: data layer
having done some implementation both with DCR and the data layer manager, I strongly believe that the EDDL (event driven data layer) is my preferred solution.
here are just some points why I would go this way:
1) independent: the data layer lives in the application without a connection to the analytic tools. IT really loves it to skip the analytic tool and doesn't have any impact on the website. and if you once change your analytic tool, you do not have any impact on the website itself (just exchange the data layer manager)
2) access event stack: I love the "computedstate" of the data layer manager. basically it gives you the last value of a certain variable at any point. this would be much more work with DCRs.
I'm sure there are points for both solution, but I recommend using a data layer. and this doesn't mean the other solution is a "no go", just my preference.