2016-04-21 7 views
1

Ich benutze das MVC-Muster in einem CodeIgniter-PHP-Projekt und ich frage mich, was ist der beste Weg, Methoden der Modelle zu erstellen, um die Lesbarkeit des Codes und die Skalierbarkeit zu gewährleisten.PHP-Modelle: Ein oder mehrere Setter durch Datenbankaktion?

Kurz gesagt, ist das besser, dies zu tun? :

public function set_account_state($new_state) { 
    // UPDATE a database record state to $new_state [0, 1 or 2] 
} 

Oder das? :

public function reject_account() { 
    // UPDATE a database record state to 0 
} 

public function accept_account() { 
    // UPDATE a database record state to 1 
} 

public function pending_account() { 
    // UPDATE a database record state to 2 
} 

Oder vielleicht ein anderer Weg?
Gibt es auch eine gute Praxis für die Funktionsbenennung in solchen Fällen?

Antwort

3
function set_account_state($state) 

Dies ist besser, wenn Sie nur eine Aufgabe haben und den Status ändern müssen. Wenn Sie jedoch in Zukunft möglicherweise andere Aufgaben ausführen müssen, bevor Sie den Kontostand ändern, benötigen Sie drei verschiedene Methoden. Sie können diese ursprüngliche Methode immer noch verwenden, um den Status des Kontos zu ändern und von Ihren drei Methoden aus aufzurufen.

Funktion Benennung sollte ein Verb mit Substantiven enthalten, um es klarer zu machen. Funktion pending_account() ist nicht so klar, Funktion keep_account_pending() ist mir ein besserer Weg, um es zu nennen.

+0

Ich stimme dieser Antwort zu. Die Kontostandsverwaltung ist an einer Stelle, wie es sein sollte. Gültige Werte für "$ state" können von Konstanten bedient werden, wodurch die Lesbarkeit und das Verständnis der Argumentwerte verbessert wird. Das bedeutet nicht, dass Sie keine privaten oder geschützten "Helfer" -Funktionen in der Klasse erstellen können oder sollten, um mit jedem bestimmten Zustand umzugehen. Die öffentliche Schnittstelle sollte jedoch eine einzige Funktion sein. – DFriend

2

Meiner Meinung nach ist der zweite Weg der bessere Weg.

Die Verwendung von Namen, die angeben, was die Methode bewirken wird, kann die Lesbarkeit des Codes verbessern.

Wenn Ihr Code größer wird, ist es leicht zu vergessen, welche Nummer welchen Status darstellt. Das passiert nicht mit Namen, weil eine Methode namens reject_account() angibt, dass das Konto besser abgelehnt wird als eine Zahl, die als Argument an eine Funktion übergeben wird.

Auch wenn andere Personen an Ihrem Code arbeiten, ist es für sie einfacher zu verstehen, was passiert, wenn eine Methode aufgerufen wird. Allerdings ist es besser zu verstehen, dass das Kundenkonto akzeptiert wird, wenn man eine Methode namens accept_account() dann sieht, wenn man set_account_state(1) sieht.

Verwandte Themen