Ich habe eine Funktionalität für Währungsumrechnungen in meinem Zend-Projekt. Ich würde gerne die Funktionalität sowohl in Controllern als auch in Modellen nutzen. Gibt es eine bewährte Methode, um diesen Code zu platzieren? Oder ist die Tatsache, dass die Funktionalität an beiden Stellen verwendet wird, ein Hinweis darauf, dass ich vielleicht die Struktur des Projekts überdenken sollte, so dass sie nicht an beiden Stellen benötigt wird?
Antwort
Zu viele Anzeigen?Ich denke, die Puristen würden argumentieren, dass es falsch ist, wenn Sie Währungsumrechnungen in Ihrem Controller-Code durchführen, da darin keine Geschäftslogik enthalten sein sollte. Allerdings überwiegen manchmal praktische Überlegungen die puristischen Bedenken. Nehmen wir an, dass dies ein solcher Fall ist. :-)
Wenn Ihre Währungsklasse eine ziemlich einfache Utility-Klasse ist, würde ich dazu neigen, ein neues Verzeichnis unter "Anwendung" namens "utils" zu erstellen und dieses Verzeichnis dann dem Ressourcenlader im Anwendungsstart hinzuzufügen:
protected function _initResourceLoader()
{
$this->_resourceLoader->addResourceType( 'utility', 'utils', 'Utility' );
}
Dann können Sie eine Klasse namens Anwendung_Utility_Währung
erstellen, die in der Datei namens Währung.php
in diesem Verzeichnis gespeichert ist, und statische Methoden aufrufen wie:
Anwendung_Utilility_Währung::umrechnen( $von_währung, $zu_währung, $betrag );
Dieser Ansatz wäre besonders nützlich, wenn Sie andere Dienstprogrammklassen hätten, die ebenfalls ein Zuhause suchen.
Wenn Ihre Währungsklasse jedoch über eine umfangreichere Funktionalität verfügt (z. B. die Verbindung zu externen Diensten zur Erhaltung von Wechselkursdaten usw.), dann wäre es meiner Meinung nach besser, sie als "Service" und nicht als "Utility" zu behandeln. Meine Definition von "Modell" ist ziemlich allgemein und umfasst alle datenbezogenen Dienste, unabhängig davon, ob sich die Daten in der Anwendungsdatenbank oder anderswo befinden. Wenn die Klasse also zu den komplexeren gehört, würde ich sie einfach bei den anderen Modellen lassen.