(także projektowanie lub programowanie zorientowane na interfejsy) wzorzec architektoniczny i styl projektowania, który na etapie projektowania architektury, definiuje aplikację jako zbiór komponentów reprezentowanych wyłącznie przez ich interfejsy, wywołania pomiędzy komponentami mogą być wykonywane tylko poprzez te interfejsy (na etapie projektowania abstrakcyjne), wewnętrzna struktura komponentów (realizacja interfejsów) powstaje jako osobny projekt każdego z nich (Steimann & Mayer, 2005).
Architektura ta, zastosowana jako wzorzec, daje dużą modularność aplikacji, a tym samym łatwość jej utrzymania i rozwoju. Jednak samo podzielenie aplikacji na dowolne komponenty komunikujące się za pomocą interfejsów nie gwarantuje małej zależności komponentów i ich wysokiej spójności, czyli dwóch kluczowych cech architektury, które powszechnie uważa się za kluczowe dla niskich kosztów utrzymania. Konieczne jest także ich dziedzinowe separowanie i spójność (patrz E.Ewans, Domanin-Driven Design, 2003).
Np. model HLD systemu informatycznego organizacji jest taką architekturą. Architektura oparta na interfejsach sprzyja zlecaniu ich wytworzenia odrębnym zespołom, dostawcom oprogramowania. Przypomina to trochę sytuację, w której producent telefonu komórkowego określa interfejs przenośnej ładowarki (układ pinów, oczekiwane napięcie prądu stałego, itp.), a zarówno producent, jak i strony trzecie tworzą własne ładowarki do telefonów komórkowych, które są zgodne z tą standardową specyfikacją interfejsu.
Realizacja dużych systemów odbywa się tu jako „projektowanie zorientowane na kontrakt”, tym kontraktem jest specyfikacja interfejsu. Interfejs (jego specyfikacja) jest tu postrzegany jako „umowa” – pomiędzy dostawcą a użytkownikiem interfejsu. Jeśli ta umowa jest udokumentowana bardziej formalnie jako specyfikacja oprogramowania, to jest to przykład projektowania przez umowę.
Wzorzec kojarzony często z językiem Java z uwagi na specyfikę tego języka, jednak jest stosowanie na etapie projektowania oprogramowania (model PIM, Platform Independent Model) nie narzuca użycia tego języka.