Placeholder article body. The final text will be written in CKEditor inside the admin and stored as HTML.
The shape
Controllers receive requests. Providers handle reads. Repositories handle persistence. Each layer has one job and is testable on its own.
The tradeoff
More files. The win is that a second consumer (API + Twig, or two different APIs) costs almost nothing to add.