Best Practice for Custom Customer Input to a Product

I would like to allow the customer to customize a product, for example to add custom text to be printed on the T-Shirt. I would like to do this as the customer is selecting the product, not as a checkout step.

Is there a best practice to accomplish this within the Pimcore Ecommerce Framework? Are any of the below ideas a good start?

Solution A:

  1. Duplicate the “generic” product as a new object (set the variant so it doesn’t display in the product listing, etc.)
  2. Set the custom customer input into the new object
  3. Add the new object to the cart

Solution B:

  1. Create a class for the customization data, ie., input: customText, relation: genericProduct, etc.
  2. Store user data in the customization object
  3. Link the customization object to the order, maybe add as a subItem (assuming the customization class extends AbstractProduct)

Solution C:

  1. Store the user input in a Sessions variable
  2. During the Checkout process, create an object brick with the user input
  3. Add the object brick to the OnlineShopOrderItem Customized attribute