Sorry for the late reply. What you describe is a common pattern, with one exception. We are no longer recommending sending complex script parameters in button objects. It can be very time consuming to get to and edit the script parameter in a button, and occasionally the parameters themselves can be very complex. Moving that functionality into a dedicated button script makes the process much simpler.
Here are two other common patterns:
We recommend editing directly via browse mode for some entities (e.g., activities) that don’t require extensive rule validation.
Complex entities that have lots of related data that do require extensive rule validation are best handled with actual records, and the validation occurs based on a status. For instance, when creating an invoice, it would be unwieldly to use utility structures for related line items. The invoice starts in a draft state, and rule validation is enforced when it’s posted.