Ich habe eine große Klasse (1500 Zeilen, aber wird bald mehrere Male sein), die ich möchte, dass es besser passt mit SRP (und so dass jede Datei kleiner und überschaubar ist .)Splitting eine große PHP-Klasse
die Klasse enthält 50-100 Eigenschaften, und verschiedene Arten von Aktionen, die gegen sie durchgeführt werden, hat - von denen ein update
sein würde, die mehrere Schritte wiederum tut wie die Datenbank aktualisieren, und E-Mails senden.
Also ich denke, ich möchte 4 Klassen.
Wie soll ich die Klassen strukturieren?
Hier ist eine vereinfachte Version von dem, was ich habe jetzt:
class Foo {
public function __construct ($params) {}
public function update() {
$this->updateDatabase();
$this->sendEmails();
}
private function updateDatabase() {}
private function sendEmails() {}
}
$foo = new Foo($params);
$foo->update();
updateDatabase()
und sendEmails()
jeder Aufruf viele andere Methoden - Hunderte von Zeilen Code jeder, und sie haben mehrere Geschwister Methoden andere Aufgaben.
Eine grundlegende Rewrite statische Methoden
class Foo {
public function __construct ($params) {}
}
class FooUpdate {
public static function update ($fooParam) {
FooUpdateDatabase::main($fooParam);
FooSendEmails::main($fooParam);
}
}
class FooUpdateDatabase {
public static function main ($fooParam) {}
}
class FooSendEmails {
public static function main ($fooParam) {}
}
$foo = new Foo($params);
FooUpdate::update($foo);
Eine grundlegende Rewrite verwenden
class Foo {
public function __construct() {}
}
class FooUpdate {
private $foo;
public function __construct ($fooParam) {
$this->foo = $fooParam;
}
public function main() {
$fooTemp = FooUpdateDatabase($this->fooParam);
$fooTemp->main();
$fooTemp = FooSendEmails($this->fooParam);
$fooTemp->main();
}
}
class FooUpdateDatabase {
private $foo;
public function __construct ($fooParam) {
$this->foo = $fooParam;
}
public function main() {}
}
class FooSendEmails {
private $foo;
public function __construct ($fooParam) {
$this->foo = $fooParam;
}
public function main() {}
}
$foo = new Foo($bar, ...);
$fooTemp = new FooUpdate($foo);
$fooTemp->update();
instanzierte Objekte zu verwenden, Oder sollte ich Vererbung oder irgendwie Züge?
Sie würden das meiste (passende) Feedback bei [Code Review] (http://codereview.stackexchange.com/) bekommen. Ich denke nach. – Marcus
@Marcus Bitte beachten Sie, dass Foo/Bar-Kennungen eine unangemessene Code Review-Frage machen würden. –
@ 200_success Guter Punkt. Damit sehe ich diese Frage sehr auf der Grundlage von Meinungen. – Marcus