Meine Frage ist einfach; Ist es möglich, den Code zu überlagern?
Wie viel ist zu viel? Ab wann geben Sie die Lesbarkeit und Wartbarkeit zugunsten von OO auf?
Ich bin eine große OO-Person, aber manchmal frage ich mich, ob ich meinen Code übermäßig verkompliziere ...
Gedanken?
Wenn Sie denken, dass mehr Objekte objektorientiert sind, dann ja.
Beim objektorientierten Design müssen Sie ein paar Kräfte ausbalancieren. Beim OO-Design geht es hauptsächlich darum, Komplexität zu reduzieren und zu handhaben. Wenn Sie also sehr komplexe Lösungen bekommen, tun Sie nicht zu viel OO, aber Sie tun es falsch.
Wenn Sie feststellen, dass die Zeit, die für die vollständige Implementierung von OO in Ihrem Projekt benötigt wird, unnötige Fehlzeiten verursacht, dann ja.
Zwischen der Freigabe von Software und der vollständigen OO-Treue muss ein Kompromiss bestehen. Die Entscheidung hängt von der Person, dem Team, dem Projekt und der Organisation ab, die das Projekt durchführt.
Ja, natürlich gibt es :-) Objektorientierte Techniken sind ein Werkzeug ... Wenn Sie das falsche Werkzeug für einen bestimmten Job verwenden, werden Sie die Dinge komplizierter machen (denken Sie an Löffel, wenn Sie nur ein Messer brauchen).
Ich bewerte "wie viel" ich nach Größe und Umfang des Projekts. Wenn es ein kleines Projekt ist, fügt es manchmal zu viel Komplexität hinzu. Wenn das Projekt groß ist, werden Sie diese Komplexität immer noch übernehmen, aber es wird sich in Form von Wartbarkeit, Erweiterbarkeit usw. amortisieren.
Mein Rat ist, es nicht zu überdenken. Das führt normalerweise zu etwas zu viel oder zu wenig (wenn nicht zu OO). Die Faustregel, die ich normalerweise verwende, ist diese: Wenn es das Problem leichter macht, meinen Kopf herumzulegen, verwende ich ein Objekt. Wenn ein anderes Paradigma es einfacher macht, meinen Kopf einzuwickeln, als wenn ich ein Objekt benutzen würde, dann benutze ich das.
Diese Strategie hat mich noch nicht enttäuscht.
Ja, es ist definitiv möglich - häufig auch. Ich habe einmal mit einem Typen zusammengearbeitet, der eine Datenstruktur erstellt hat, die an eine Dropdown-Liste gebunden ist - damit er Benutzern erlauben kann, ein Geschlecht auszuwählen. Es stimmt, das wäre nützlich, wenn sich die Liste der möglichen Geschlechter ändern würde, aber sie haben es noch nicht (wir leben nicht in Kalifornien)
Ja, genau wie man einen Datenbankentwurf über-normalisieren kann.
Dies scheint eine jener puristischen vs. pragmatischen Debatten zu sein, die nie enden werden. & lt;: S
Viele Leute versuchen, ihren Code so zu gestalten, dass sie maximale Flexibilität bietet und wiederverwendet wird, ohne zu überlegen, wie wahrscheinlich das sein wird. Brechen Sie stattdessen Ihre Klassen basierend auf dem Programm, das Sie schreiben. Wenn Sie genau eine Instanz eines bestimmten Objekts haben, könnten Sie in Betracht ziehen, es in das enthaltene Objekt zu integrieren.
Ich denke, deine Frage sollte lauten: "Kannst du deine Anwendung überarbeiten?"
Und natürlich ist die Antwort noch. OO ist nur ein Ansatz für das Design. Wenn Sie Ihre Zeit damit verbringen, unnötige Komplexität in ein System zu bringen, weil "Polymorphism Rocks!" Dann ja, vielleicht bist du über OOing.
Die XP-Antwort lautet: Unabhängig davon, welchen Ansatz Sie favorisieren (OO, prozedural usw.), sollte das Design nur so komplex sein, wie es nachweislich notwendig ist.
Ja, das kannst du. Wenn Sie beispielsweise Interfaces oder abstrakte Klassen erstellen, bevor Sie zwei Subtypen für sie haben, sind Sie überfordert. Ich sehe diese Art des Denkens oft, wenn Entwickler (über) vorne entwerfen. Ich verwende Test-Driven Development und Refactoring-Techniken, um dieses Verhalten zu vermeiden.
ist es möglich, Ihren Code zu überlagern?
Nein. Es ist jedoch möglich, Ihren Code zu komplizieren. Zum Beispiel können Sie Entwurfsmuster verwenden, um Entwurfsmuster zu verwenden. Aber Sie können Ihren Code nicht objektorientieren. Ihr Code ist entweder objektorientiert oder nicht. Genauso wie Ihr Code entweder gut gestaltet ist oder nicht.
Ja. Sehen Sie das Konzept des "Golden Hammer" goldenhammer "> Antipattern "
Ich denke, es gibt Zeiten, in denen OO-Design extrem werden kann und selbst in sehr großen Projekten der Code weniger lesbar und wartbar macht. Zum Beispiel kann es in einer Footware-Basisklasse und Kindklassen von Sneaker, Dress-Shoe usw. verwendet werden. Aber ich habe den Code von Leuten gelesen / überprüft, bei denen es so aussah, als würden sie Klassen für NikeSneakers erstellen und ReebokSneakers. Natürlich gibt es Unterschiede zwischen den beiden, aber um lesbaren, wartbaren Code zu haben, glaube ich, dass es manchmal wichtig ist, eine Klasse zu erweitern, um sich an Unterschiede anzupassen, anstatt neue Unterklassen zu erstellen, um die Unterschiede zu handhaben.
Ja, und es ist einfach. Code ist nicht besser, nur weil er objektorientiert ist, genauso wie er besser ist, einfach weil er modular oder funktional oder generisch oder generativ oder datenflussbasiert oder aspektorientiert ist oder irgendetwas anderes.
Guter Code ist guter Code, weil er in seinem Programmierparadigma gut entworfen ist.
Gutes Design erfordert Sorgfalt.
Aufpassen braucht Zeit.
Ein Beispiel für Ihren Fall: Ich habe schreckliche Teile von Java gesehen, in denen, im Namen Als "objektorientiert" implementiert jede Klasse eine Schnittstelle, selbst wenn keine andere Klasse diese Schnittstelle implementiert. Manchmal ist es ein Hack, aber in anderen ist es wirklich kostenlos.
In welchem Paradigma oder Idiom Sie Code schreiben, zu weit gehen, zu viel von einer guten Sache nehmen, kann den Code komplizierter machen als das Problem. Manche Leute werden sagen, wenn dieser Punkt erreicht ist, ist der Code zum Beispiel nicht mehr wirklich objektorientiert.
Objektorientierter Code soll besser organisiert sein, um einfacher, direkter oder einfacher zu verstehen und in einigermaßen unabhängigen Teilen zu verdauen. Die Verwendung der Mechanismen der objektorientierten Kodierung, die antiethisch zu diesem Ziel führt, führt zu nicht zu objektorientiertem Design .
Ich denke, die klare Antwort ist ja, aber abhängig von der Domain, auf die Sie sich beziehen, könnte es WIRKLICH ja oder weniger ja sein. Wenn Sie High-Level-.Net-oder Java-Anwendungen erstellen, dann denke ich, dass dies der letztere ist, da OO im Grunde in die Sprache eingebaut ist. Auf der anderen Seite, wenn Sie an eingebetteten Anwendungen arbeiten, sind die Gefahren und die Wahrscheinlichkeit, dass Sie über OO'ing sind, hoch. Es gibt nichts Schlimmeres, als zu sehen, wie eine wirklich hochrangige Person in ein eingebettetes Projekt kommt und Dinge, die sie für hässlich halten, verkompliziert, aber sie sind die einfachsten und schnellsten Methoden, Dinge zu tun.
Tags und Links oop