Querying orders with WP_Query couples the code to orders being posts, which is the thing WooCommerce spent 3.0 making replaceable.
// tied to the storage
$q = new WP_Query( array(
'post_type' => 'shop_order',
'post_status' => 'wc-processing',
'meta_query' => array( array( 'key' => '_customer_user', 'value' => $id ) ),
) );
// asks WooCommerce, which asks whatever the data store is
$orders = wc_get_orders( array(
'status' => 'processing',
'customer' => $id,
'limit' => 50,
) );
It returns order objects rather than posts, so the calling code gets get_total() and get_items() instead of raw meta. The argument names are WooCommerce’s own and do not match WP_Query, which is the small friction that makes people stay with the familiar version. The payoff is entirely in the future — when the storage moves, this code keeps working and the other version does not.