How does it violate separation of concerns? The code is aware of the semantics and fields of groups throughout, and the use of UUIDs isn't really specific to our database layer. Having it this way means you write code where you can't tell exactly what's being passed from the immediate context, and my experience of that in the past, especially in puppet, makes me uncomfortable.