Очень просто, вам просто не хватает клея, чтобы соединить все вместе. Это часто называют «бизнес-логикой». То, что у вас есть в качестве вашей «модели», на самом деле является вашим слоем хранения данных. Ваша модель должна использовать это, чтобы вернуть контроллеру то, что нужно дать представлению.
Внизу кода у вас есть несколько альтернатив. Один из них заключается в том, чтобы контроллер использовал класс данных, который вы должны собрать для массива, который хочет использовать представление. Это лучше, если никакой другой контроллер не должен будет это делать. Другим решением было бы добавить код модели для этого. Это позволяет другим контроллерам вызывать ту же модель для получения тех же данных, но если у вас есть другие классы, которым нужна такая же процедура, вы будете повторять код. Третье решение - расширить вашу модель данных, чтобы обеспечить представление коллекции. Затем код модели становится простым слоем перевода между тем, какую коллекцию хочет контроллер, и запросом модели данных. Это может быть даже достаточно просто оставить в контроллере.