3 Stimmen

Ist es bewährte Praxis, die Datenbankverbindung immer in einer einzigen Instanz zu halten?

Ich möchte fragen, ob es eine gute Praxis ist, eine einzelne Instanz der Datenbankverbindung zu haben oder jedes Mal, wenn wir sie benötigen, eine neue zu deklarieren. Ich habe diese zwei Designs unten gezeigt:

Dies ist die Datenbankklasse:

host = $host;
        }

        if(isset($dbname) && !empty($dbname)) {
            $this->dbname = $dbname;
        }

        if(isset($username) && !empty($username)) {
            $this->username = $username;
        }

        if(isset($passwd) && !empty($passwd)) {
            $this->passwd = $passwd;
        }

        parent::__construct("mysql:dbname=$this->dbname;host=$this->host", $this->username, $this->passwd, NULL);
        parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        parent::setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }

}
?>

Methode 1: Dependency Injection

db = $db;
    }

    //Einige Updates und Einfügungen weiter unten
}

class Employee {
    private $db;

    public function __construct(Database $db) {
        $this->db = $db;
    }

    //Einige Updates und Einfügungen weiter unten
}
?>

Also werde ich das tun, wenn ich die Klassen verwenden möchte:

update($id,$data);

    $emp = new Employee($db);
    $emp->delete($id);
?>

oder auf andere Weise?

Methode 2:

db = new Database();
    }

    //Einige Updates und Einfügungen weiter unten
}

class Employee {
    private $db;

    public function __construct() {
        $this->db = new Database();
    }

    //Einige Updates und Einfügungen weiter unten
}
?>

Und wenn ich es verwenden möchte, werde ich:

update($id,$data);

    $emp = new Employee();
    $emp->delete($id);
?>

Welche Methode ist vorzuziehen oder besser? Bieten Sie eine Erklärung, wenn möglich.

1voto

Matthieu Napoli Punkte 45122

Offensichtlich ist die Methode der Dependency Injection besser, weil sie vermeidet, dass mehrere Verbindungen zur gleichen Datenbank hergestellt werden.

Das Problem, dem Sie jedoch gegenüberstehen werden, ist, das $db-Objekt in jedem Konstruktor Ihrer Klasse einzufügen. Hier können Ihnen Dependency Injection Container helfen. Ihre Aufgabe besteht darin, Objekte zu erstellen (und somit die Abhängigkeiten in den Konstruktoren zu übergeben).

Schauen Sie sich diesen Artikel an: Understanding dependency injection, der ein Beispiel für die Verwendung von Dependency Injection mit einem Container zeigt.

-2voto

Dskrenta Punkte 21

Persönlich bevorzuge ich es normalerweise, etwas Ähnliches für meine Anwendungen zu haben, genannt sql.php und oben auf jeder Seite erforderlich. Mir gefällt dieser Ansatz wirklich, weil es wirklich einfach macht, Änderungen an den Anmeldeinformationen vorzunehmen oder eine neue Variable mit einem anderen Tabellennamen hinzuzufügen. Hilft auch bei der Versionskontrolle.

// Vars
$host = "localhost"; // Hostname
$username = "blah"; // Mysql-Benutzername
$password = "999999"; // Mysql-Passwort
$db_name = "db"; // Datenbankname
$main_table = "table11"; // Hauptinhalt Speicher Tabellenname

// Verbindung zum Server herstellen und Datenbank auswählen.
mysql_connect($host, $username, $password, $db_name)or die("kann keine Verbindung herstellen");
mysql_select_db("$db_name")or die("kann DB nicht auswählen");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X