Вообще говоря, да, для каждого действия нужен свой вид/шаблон, причём вид и шаблон считать синонимами можно только с натяжкой. Или даже несколько видов, среди которых контроллер выбирает нужный в данный момент.
Использования наследования и включений шаблонов это следование другим практикам и паттернам непосредственно к MVC отношения не имеющим. Как, кстати, не имеет отношения к MVC и «запускается приложение из index.php, метод route разбирает запрос пользователя и отдает управление одному из методов соответствующего контроллера».
При выборе между наследованием/декорирования и включение посоветовал бы делать упор на первое. Даже без использования шаблонизаторов типа Smarty или Twig оно осуществляется довольно легко с помощью функций ob_*, особенно если достаточно двухуровневого. Метод render может выглядеть примерно так:
ob_start();
require $template;
$content = ob_get_clean();
require 'layout.php';
layout.php так
<html>
<body>
<div id="header">Шапка</div>
<div id="content">
<?= $content ?>
</div>
</body>
</html>
А blog_index так
<?php foreach($posts as $post): ?>
<div class="post">
<h1><?= $post->title ?></h1>
<?= $post->content ?>
</div>
<?php endforeach ?>