Ich habe eine App, die im Wesentlichen ein Wrapper für eine API von Drittanbietern ist. Die App verwendet keine Datenbank und speichert nur ein einzelnes Cookie, das die von der API benötigte Sitzungs-ID ist.PHP OOP :: Erstellen einer API-Wrapper-Klasse
Die API ist ein Einkaufssystem, das Benutzern
-login ermöglicht/Registrieren/Profil bearbeiten/Logout
-Buy Waren
-Stellen einer Spende
-become Mitglied
Die API verfügt über 50 Methoden, zu denen meine App eine Verbindung herstellen muss. Beispiel API Aufrufe sind addItemToBasket(), addDonation(), GetUserDetails() etc.
Ich versuche herauszufinden, was Klassen in meiner Anwendung sein sollte. Hier ist, was ich bisher:
Klassen
1) APIManager() der Klasse Enthält die Methoden, die in der 3rd-Party-API und bietet ausgesetzt eins-zu-eins mit den Methoden entsprechen den Mechanismus, um eine Verbindung zum Remote-API-Server herzustellen. So würde ein Benutzer über
APIManager->loginUser($sessionKey, $uid, $pwd);
angemeldet werden und die Remote-API, um den Benutzer festgelegt würde, wie angemeldet Wenn es sein muss, meine Anwendung der in Status jeder Sitzungsschlüssel durch den Aufruf der API protokolliert überprüfen.
APIManager->isLoggedIn($sessionKey);
2) Benutzer() der Klasse Dies gilt Methoden, die vor der Verarbeitung API-Aufrufe wie Register oder Anmeldung erforderlich Geschäftslogik enthalten. Ein beispielhaftes Verfahren ist:
function login($_POST) {
//perform sanity checks, apply business rules etc.
//if certain conditions are met, we may pass in a promo code, $pc
APIManager->loginUser($sessionkey, $_POST['uid'], $_POST['pwd'], $pc);
}
Ich weiß, dass ich wahrscheinlich einen Anruf zu APIManager von der Anmeldeseite machen nur, anstatt per se eine Benutzerklasse zu haben, aber ich fühlte, dass da einige Geschäftslogik ausgeführt werden muss, bevor Wir rufen tatsächlich die loginUser() - Methode der API auf, es fühlte sich richtig an, dass dies in einer Benutzerklasse behandelt wurde. Ich würde gerne wissen, was die Leute darüber denken.
3) Basket() der Klasse
Der Korb in der 3rd Party-API verwaltet wird, so Rolle meine App ist auf die entsprechende API-Anrufe neue Objekte in den Warenkorb hinzufügen, Elemente entfernen, sehen die Warenkorb usw. Meine App weiß nichts über den Warenkorb, bis die Daten aus der API abgerufen werden, noch kann er Änderungen am Warenkorb vornehmen, ohne über die API zu gehen. Wiederum schien es angemessen, diese verwandte Logik in eine Basket-Klasse zu gruppieren. Die Front-End-Web-Seite so etwas wie nennen könnte:
Basket->addItem(23);
und diese addItem() -Methode in der Basket-Klasse würde in etwa so aussieht:
addItem($itemID) {
//perform checks, apply business rules e.g. if user is eligible for discount
APIManager->addToCart($itemID, $discount);
}
wo addToCart() ist die dritte Partei API Methode, die wir Rufen Sie an, um den Artikel zu bearbeiten.
4) Donation() der Klasse
Dies ermöglicht es Benutzern, eine Spende zu machen. Die Spende erscheint im Warenkorb und kann aus dem Warenkorb entfernt werden. Ich dachte, nur ein addDonate() -Methode zum Korb Klasse hinzufügen und sich keine Sorgen über überhaupt eine Spende zum Gegenstand haben, aber ... (siehe unten)
5) Mitgliedschaft() der Klasse
. .. Mitgliedschaften sind eigentlich eine Art von Spende! Die API behandelt die Spende, die auf ein bestimmtes Konto geht, als eine einjährige Mitgliedschaft und keine einfache Spende. Wir können die Logik/das Verhalten der API der dritten Partei nicht ändern.
Also, wenn ich $ 50 auf Konto '1' spende, dann ist es nur eine normale Spende, aber wenn ich $ 100 auf Konto '8' spende, werde ich Mitglied mit allen Mitgliedsvorteilen (reduzierte Preise, keine Portogebühr usw).
Hier bin ich mir nicht sicher über den besten Weg, dies zu entwerfen.
Sollte ich eine Spendenklasse erstellen und diese dann mit der Mitgliedschaft erweitern, da alle Spendenmethoden von der Mitgliedschaft benötigt werden. Aber die Mitgliedschaft wird zusätzliche Methoden wie renew() oder getExpiry() usw. benötigen.
Auch, sollte ich auf die Erweiterung des Benutzers Mitglied werden? Wiederum hat ein Mitglied alle Kernmethoden, die der Benutzer hat, hat aber auch zusätzliche wie getSpecialOffers() oder getDiscountCode(), auf die nur Mitglieder zugreifen würden.
Jede Anleitung, wie man sich dem Design am besten annähert, würde sehr geschätzt werden.
Danke, James
nicht die Antwort, die Sie suchen, aber was mir hilft, wenn sie in einem objektorientierten Design etwas entwerfen, ist ein Diagramm zu ziehen von den Objekten, herauszufinden, wo es Gemeinsamkeiten gibt. Wenn du dies tust, bevor du einsteigst und Code schreibst, wirst du feststellen, dass es dir viel leichter fällt. Und Sie werden mit etwas mehr auf lange Sicht pflegen. – diagonalbatman