{
"assistant_response": "## DatabaseFactory vs PDO\n\n**Kein Entweder-Oder** - sie arbeiten zusammen:\n\n```\n┌─────────────────┐ ┌─────────────┐ ┌──────────┐\n│ DatabaseFactory │ --> │ Database │ --> │ PDO │\n│ (Ersteller) │ │ (Wrapper) │ │ (Driver) │\n└─────────────────┘ └─────────────┘ └──────────┘\n Pattern Klasse PHP-Extension\n```\n\n### PDO = Der Treiber\n```php\n\/\/ PDO ist die Low-Level-Verbindung\n$pdo = new PDO(\"mysql:host=localhost;dbname=test\", \"user\", \"pass\");\n$pdo->query(\"SELECT * FROM users\");\n```\n\n### Factory = Das Erstellungsmuster\n```php\nclass DatabaseFactory {\n public static function create(string $type): DatabaseInterface {\n return match($type) {\n 'mysql' => new MySQLDatabase(), \/\/ nutzt PDO intern\n 'sqlite' => new SQLiteDatabase(), \/\/ nutzt PDO intern\n 'mock' => new MockDatabase(), \/\/ für Tests\n };\n }\n}\n\n\/\/ Verwendung\n$db = DatabaseFactory::create('mysql');\n```\n\n### Warum Factory zusätzlich zu PDO?\n\n| Aspekt | Nur PDO | Mit Factory |\n|--------|---------|-------------|\n| Konfiguration | Überall verstreut | Zentralisiert |\n| Testbarkeit | Schwer zu mocken | MockDatabase möglich |\n| Wechsel DB-Typ | Viele Stellen ändern | Eine Stelle |\n| Credentials | Bei jedem `new PDO()` | Einmal in Factory |\n\n### Praxis-Beispiel\n```php\n\/\/ Ohne Factory - PDO überall\nclass UserRepository {\n public function __construct() {\n $this->pdo = new PDO(\"mysql:...\", \"user\", \"pass\"); \/\/ Hardcoded!\n }\n}\n\n\/\/ Mit Factory - sauber getrennt\nclass UserRepository {\n public function __construct(DatabaseInterface $db) {\n $this->db = $db; \/\/ Injiziert, testbar\n }\n}\n\n\/\/ Anwendung\n$db = DatabaseFactory::create('mysql');\n$repo = new UserRepository($db);\n```\n\n**Fazit:** PDO ist der Motor, Factory ist die Werkstatt die den Motor einbaut. Beides zusammen = saubere Architektur."
}