рассказываю на пальцах
object pool - он же пул синглтонов - он же registry в опенкарте. Это склад инструментов с двумя главными методами - положить в склад и забрать из склада. Инициализируется он в index.php
роутер в опенкарте работает через гет переменную route. А еще точнее если в урле нету знака вопроса то опенкарт будет считать такой урл -ЧПУшным и будет прогонять через seo_url контроллер, но это другая история. Через гет переменную route опенкарт понимает какой контроллер вызвать. route переменную разбирает конструктор класса Action (system/engine/action.php)
По идеологии MVC все запросы сыпятся на контроллер, контроллер содержит логику, модель содержит инструменты для этой логики, вьюха выводит то что наделал контроллер.
логика така. >index.php ........ $action=new Action($_GET['route']) > $action->execute(); и в этот момент вызывается контроллер в котором происходит все мясо. Сам контроллер в свою очередь тоже является объектом своего класса(это отдельная тема, но каждый контроллер это по сути класс) и внутри него есть переменная $this, к которой если обратиться то будет регистр со всеми синглтонами (работа с базой, работа с валютами, языками и прочее) и будут все модели, которые будут загружены в этот контроллер через синглтон $this->load->model('account/login').
все оооочень сжато но если че непонятно то мож спрашивать. на работе имею дело с сим чудом