I hear you, and must admit that you share the sentiments of some other people who I’ve spoken too. Here is the sort of scenario that drove this technique in the first place.
I have some websites that use multiple levels of admin capability. One in particular maintains a database of houses. There are 40-50 attributes having a one-to-one relationship with a given house. Master administrators have the capability of modifying just about all of them. Second-tier administrators can only maintain about 30 of those fields.
For me to have to list 50 individual arguments in one function call sounded like an exercise in frustration. Then to implement that same “updateProperty” function for the second tier admins, I would have to create a call with 30 arguments passed from their admin page, and pass in the other 20 as values that were defaulted on the calling page.
Simply using defaults to allow me to pass less data seems limited to only one argument in my mind. If I have 7 expected function arguments and only want to pass 4, there isn’t a way to tell the function that argument 2,3,6 are missing or if it’s arguments 3,5,6 that are missing.
For my purpose I felt like using a structure was the right choice, especially in an instance when I’ll be updating 4 or 5 fields based on an action. The only other option in my mind would be to create several different functions all doing very similar operations with the relevent data that expect a subset of the arguments. Keeping my functionality encapsulated in one place seemed far superior in my mind to having 11 different functions that would all need to be addressed individually for any sort of data model change.
I might also mention that I had to figure out a rapid development framework because I was trying to juggle 9 different projects with short timelines, and I am the only programmer.
The double-blessing of that is that there weren’t any pointy-headed project management types trying to force six-sigma methodologies down my throat. Given that my timeline was on the order of a couple weeks instead of the 18+ months that some SDLCs can be permitted.
Getting paid by the project and not being on salary had a big impact on my choice too. I am all about project gates when I am going to be getting the same amount in my check whether the project is completed or continues to be ongoing.
As with everything else on the Internet, YMMV. It was a good fit for me though.