Ich habe jetzt seit langer Zeit versucht, meinen Kopf um OOP zu wickeln. Ich sehe seine Vorteile. Ich habe viele, viele Tutorials gelesen und mir zu diesem Thema gleich viele Videos angesehen. Ich bekomme die Tier- / Katzen- / Hundebeispiele, ich bekomme die Auto- / Fahrtbeispiele. Ich habe Probleme damit, diese Konzepte in einer realen Anwendung anzuwenden. Also habe ich mich vorgenommen, eine mit OOP zu erstellen.
Ich bitte nicht um Hilfe bei der Syntax oder beim Schreiben von spezifischem Code - ich finde das selbst in der Dokumentation und beim Durchsuchen von Foren usw. Was ich wirklich brauche, ist eine Anleitung und hin und wieder ein Vorstoß in die richtige Richtung. Gibt es erfahrene Programmierer, die bereit sind, mich zu betreuen?
Als mein Lernprojekt möchte ich eine einfache Kleinanzeigen "Web App" erstellen. Ähnlich wie bei Craigslist, aber vom Umfang her verwässert. Ich möchte PHP5 und MySQL verwenden, weil ich mit ihnen vertraut bin.
Angenommen, es gibt nur diese zwei Anwendungsfälle:
- Etwas zum Verkauf anbieten
- Stöbern / Suchen nach etwas zum Kaufen
Welche "Dinge" sollen Gegenstände sein? Ich kann mir vorstellen, dass jeder Gegenstand ein Objekt sein könnte, aber an welchem Punkt? Und warum?
Wenn der Benutzer beispielsweise das Formular "Artikel zum Verkauf bereitstellen" ausfüllt, wird dieses Formular dann in ein Objekt umgewandelt, das an ein anderes Objekt übergeben wird, das die Werte in eine Datenbank einfügt.
Was ist, wenn ein anderer Benutzer gerade im Internet surft und alle Artikel der Kategorie C anfordert? Ist es sinnvoll, dass die App immer dann, wenn sie eine Verbindung zu ihrer Datenbank herstellen muss, ein Datenbankobjekt erstellt, eine Reihe von Elementobjekten abruft und diese auf der Seite anzeigt? … Wenn ich das aufschreibe, wird mir klar, wie ahnungslos ich immer noch über OOP bin. Bitte helfen Sie mir, das zu beheben.
Wenn Sie der Meinung sind, dass dies kein gutes Projekt ist, um sich mit OOP vertraut zu machen, können Sie gerne eine andere Idee vorschlagen!
quelle
Antworten:
Ich denke ehrlich, dass der Ratschlag hier für neue OO-Lernende bisher schrecklich war. Es ist keine gute Idee, Objekte sofort als Repräsentationen einer bestimmten Instanz eines "Dings" zu betrachten, das von einer Klasse definiert wird. Es ist besser, sie als unterteilte Komponenten einer Maschine zu betrachten, die eine gewisse Interaktion miteinander haben, aber nicht die Interna der anderen. Jede dieser Komponenten behält den Status bei
Wenn Sie ein ORM (Object-Relational-Mapping) für DB-Interaktionen verwenden möchten, enthält jedes Framework, das Sie verwenden oder erstellen, möglicherweise einige flache Objekte, die Tabellen darstellen, bei denen es sich wahrscheinlich um Sammlungen von "Dingen" handelt. Ich persönlich mag ORMs jedoch nicht und ich denke nicht, dass sie unbedingt ideale OO-Praktiken darstellen, aber sie sind beliebt für große Web-Apps.
Außerdem werden Sie wahrscheinlich einige wichtige Komponenten haben, die der Web-App-Computer ausführen muss, wie z. B. eine oder mehrere DB-Verbindungen (Sie können eine Klasse erstellen, die eine Verbindung aufrechterhält, und Sie können vorbereitete Abfragen von ausführen -
PDO
ist großartig für sich , aber ich würde es einpacken), und vielleicht ein Template-System für Ihre Ansichten. Möglicherweise möchten Sie, dass Ihre Controller auch PHP-Objekte sind. Wenn Sie ein Formular ausfüllen müssen, verfügen Sie möglicherweise über ein Objekt, das Formularwerte für P / R / G, ein CSRF-Schutztoken, verwaltet und dessen Eingaben validieren kann.Sie sollten nicht versuchen, nach "Dingen" zu suchen, die sich in Objekte verwandeln, wenn Sie Ihr Web-App-Design und Ihr Objektdiagramm erstellen. Stattdessen sollten Sie über die logischen Komponenten nachdenken, die zusammenkommen, um es zu erstellen. Ich denke nicht, dass Sie versuchen sollten, dies zu erzwingen, und es sollte ziemlich natürlich kommen, aber es ist sehr schwierig, es richtig zu machen, und Sie werden definitiv einige Designentscheidungen auf dem Weg ändern müssen.
Mein letzter Rat lautet: Komposition über Vererbung ist der richtige Weg.
quelle
Hier erfahren Sie, wie Sie mit OOP Ihre Haustiere kaufen und verkaufen können. Dieselbe Methode kann auch für den Verkauf von Autos oder Flugzeugen verwendet werden
quelle
Auf Wunsch von OP teile ich meinen Gästebuchcode mit.
Nachrichtenklasse:
Nachrichtendatenzugriffsobjektklasse:
index.php
Ich habe einige der Variablen und Funktionen umbenannt, um Ihnen einen Sinn zu geben (übersetzt von Niederländisch nach Englisch: P), damit Sie manchmal seltsame Empfindungen finden, weil ich sie nur schnell ersetzt habe usw. Viel Spaß damit. Dies ist auch nicht der gesamte Code, da ich dann etwa 20 Dateien mit folgendem Code posten würde: P
quelle
Wie von Explosion Pills erwähnt, beziehen sich in einer komplexen Anwendung die meisten Objekte auf Anwendungskomponenten (z. B. Datenbankverbindungspools, Befehle, Datenstrukturen wie Hashmaps) und nicht auf reale Entitäten (z. B. Bordkarte, Rechnung oder MP3-Datei) ). Es gibt viele gute Bücher zu Designmustern, die Ihnen zeigen, wie Menschen viele wiederkehrende Probleme in diesem Bereich gelöst haben. Das so genannte GOF-Buch ist gründlich, aber sehr trocken. Head First Design Patterns sind möglicherweise besser zugänglich.
In Bezug auf Analyse und Design der realen Welt. Es ist oft hilfreich, in Substantiven und Verben zu denken. Beispielsweise kann eine Videokreditbibliothek (sind diese jetzt veraltet?) Die folgenden Dinge / Substantive enthalten:
In Bezug auf Verben:
Diese können dann in Klassen mit Operationen umgewandelt werden (es ist lange her, dass ich PHP gemacht habe, also werde ich es vermeiden):
Es braucht viel Übung und Spielerei. Das Beste, was Sie tun können, ist, sich auf die fehlgeschlagenen Entwürfe einzulassen und daraus zu lernen. Meiner Meinung nach ist OO etwas, das Sie über Ihr Leben hinweg weiter lernen und entwickeln können (es ist nicht einfach und es gibt keine perfekten Lösungen für irgendetwas). Gutes Design ist oft iterativ. Probieren Sie ein paar verschiedene Ideen für Ihre "Craig's List" -Webapp aus.
quelle
Das Beste, was Sie tun können, ist, sich auf den Kern Ihrer Anwendung zu konzentrieren - "post", "user", "post :: FindByName ()", "user-> Validate ()" usw., und sich keine Sorgen zu machen zu viel über die Installation - wie man Beiträge in Datenbanktabellen einfügt, wie man die Anzeige für einen Beitrag zwischen verschiedenen Suchvorgängen konsistent hält und wie man das Formular "Beitrag eingeben" in einen Datenbankdatensatz einfügt.
Glücklicherweise gibt es viele Frameworks, die dies für Sie tun. Das vorherrschende Paradigma in OO-Webanwendungen ist "Model-View-Controller", auch als MVC bekannt . In PHP gibt es eine Reihe von Standard-MVC-Frameworks, die Sie verwenden können.
Während dies Ihr Lernbedürfnis erweitert - Sie müssen jetzt sowohl MVC als auch OO kennenlernen -, bedeutet dies, dass sich Ihre OO-Bemühungen größtenteils auf die Ebene "Modell" beschränken, die Ihre Geschäftsdomäne darstellt. Hier ist OO am natürlichsten und ausdrucksvollsten. Mit den meisten MVC-Frameworks können Sie Ihre "Modell" -Schicht definieren und anschließend mithilfe einer als "Scaffolding" bezeichneten Technik automatisch eine Website um diese herum erstellen. Auf diese Weise erhalten Sie eine schnelle Möglichkeit, mit verschiedenen Implementierungen für Ihr Domain-Modell zu experimentieren, ohne die Klempnerarbeiten abwickeln zu müssen.
quelle