When I was a dev lead last time (full of juniors, most of them were last year students on CS MSc), I had a third approach:
- Give the story to the junior dev
- Tell him to come back with a plan how it would be solved
- After reviewing the plan, but only after, start editing files.
I don't say it worked quite well.
For simple tasks, like, add a new column to a report table, they did a huge mess, editing all the files, then they said "it's already done", then we reviewed it, turned out it's not the way it should've been done, they had to revert nearly everything (1) and then start again.
On big tasks (5+ classes involved), it was on the other side: they were simply silent for a day or two, then we had to go through it together, and basically I drew up a design which they had to implement.
Although I was there and for every single decision I explained it to them fully, and they had the required readings before, and it was more like a demonstration (2), at the end of the day, they still had to implement my design mostly, and they weren't that happy about it as when they're let free.
I know it's hard to differentiate planning from doing, but I guess it's called software engineering because there are still a few individuals left who know what they do, as opposed to craftsmen. My duty as their trainer was not to create another average coder, but someone who excels in his profession. Luckily, today, all of these are teamleaders (or were, but joined a different, more "agile" company with no leadership)
So, all in all, I don't know what's best, I only know that code quality is more important than junior's convenience - they're there to learn, not to let any kind of code to be commited to prod...
(1) ("Why? It works, doesn't it?" "Yes, but you're querying database from the view layer or such")
(2) ("you see? we need this, and we usually use this pattern for this as you seen in this other similar module; here, our coding guideline (which was 2 pages long) says, do this, so, let's do this, and then ,let's draw a sequence diagram on how it would work... ok, now let's draw a class diagram about it")