Ive done mine in a tiered generator.
I start on the left side of the map then randomly gen a new space either right up or down and continue til I hit the edge of the layout or run outta rooms to add (a global I set on start)
Then I have a basic shape for the level. Then I loop thru the rooms and check for rooms around it and use that to determine the bounds of the level (open space inside completely surrounded by walls).
Then I loop thru each room AGAIN and based on what kinda room it became in the last step I replace it with a random room designed to fit in that section (if its a top left corner its replaced with a room with walls on the top and left)
After thats done Ive basically created a random level MAP. Its not playable cause its just graphics of how the level looks. Then I use the rooms everything got assigned in the last step to actual generate playable rooms.
It sounds overly complex but it makes it finely tuned to control exactly how I generate the finished level.
I made this room editor to help me make the rooms I want and get the layout of the objects to be used to make the playable areas.
anb.mooo.com/layouteditor
I use the screenshot of it to make my visual layout (the objects the player collides with arent visible) and the string it generates to create the objects when that rooms generated.
The project Im usin it for is a platformer with 160 different rooms it uses to generate the levels