Byl poprvé uveden v objektově orientovaném programovém prostředí Smalltalk. Díky tomuto modelu je aplikace dělena na tři vrstvy a múžeme tak dosáhnout větší flexibility a vícenásobné použitelnosti kódu.
2.2.1 Vrstva Model
Tato vrstva obsahuje data, s nimiž aplikace pracuje a funkce pro operaci nad těmito daty. Objekt Model je nezávislý na vstupním a výstupním chováním aplikace. Objektů Model může aplikace obsahovat i více (v praxi se může jednat například o několik tabulek v databázi, otevřené soubory, nebo služby jiných aplikací).
2.2.2 Vrstva View
Tato vrstva je interpretující – zobrazující – data uživateli. Neobsahuje vlastní data, ani logiku práce s nimi. Objektů view může být v aplikace více, protože můžeme chtít zobrazit více různých údajů o modelu, nebo požadovat výstup konkrétně optimalizovaný (např. Bez grafiky, čistě textově, v XML…). Každý objekt View je asociovaný k objektu Controller.
2.2.3 Vrstva Controller
Kód zpracovávající uživatelský vstup. Přijímá události vyvolané objekty ve vrstvě view, které transformuje jako požadavky na službu pro View, nebo Model. Zajišťuje logiku chování celého systému.