Schau dir mal die Infos zum Bridge-Pattern an. Dieses Pattern wird zwar meist zur Abstraktion des Oberflächenzugriffs (Anwendung soll unter Windows, XWindows, ... laufen) verwendet, kann aber Prima zur Kapsellung der Datenbankzugriffsschicht verwendet werden (um auch noch
DB-Unabhängig zu werden).
Zusätzlich kannst Du (wenn dein 3-Schichten-Modell darauf abziehlt die
DB-Zugriffsschicht auf einen gesonderten Rechner (Server) zu legen) Techniken wie
SOAP/Web Services,
DCOM/
COM+ oder ähnliches verwenden.