Ad. 'talking to the database'. I think I partially agree - and indeed I've wrote DBIx::Class::ResultSet::RecursiveUpdate
exactly for the task of saving the data that I get from form processors (originally for FormFu, later Rose, and now I think about HTML::FormHandler
, thanks to having it separated I can change the form processors quite easily). So the form only generates an update hash (or a more complex structure of hashes and arrays) and it is saved to the db by this specialized module. But still on the form processor there is always that ->save_to_db (or ->process) method which asks RecursiveUpdate to do the saving. It is just convenient.
And in the other direction - it is the same thing, you need to walk all the form nodes and convert the internal objects into the field values - what else could be better suited for that task than the form processor itself?