Mir wurde klar, dass ich Schwierigkeiten habe, OOP-Designs zu erstellen. Ich habe viel Zeit damit verbracht, zu entscheiden, ob diese Eigenschaft korrekt auf die X-Klasse gesetzt ist.
Dies ist beispielsweise ein Beitrag, der einige Tage hat: /codereview/8041/how-to-improve-my-factory-design
Ich bin nicht von meinem Code überzeugt. Deshalb möchte ich meine Designs verbessern und weniger Zeit für deren Erstellung benötigen.
Wie haben Sie gelernt, gute Designs zu erstellen? Einige Bücher, die Sie mir empfehlen können?
design
object-oriented
Darf Zon
quelle
quelle
Antworten:
Das Entwerfen von Systemen ist eines der Dinge, die Sie nur verbessern können, wenn Sie dies tun. Natürlich hilft es ein wenig, etwas über gutes Design zu lesen - das empfohlene allgemeine objektorientierte Designbuch ist das Band of Four's Design Patterns: Elemente wiederverwendbarer objektorientierter Software . Es gibt auch andere Bücher über Entwurfsmuster und -prinzipien für verschiedene Arten von Systemen und in verschiedenen Bereichen.
Es ist auch am besten, andere Leute mit einzubeziehen. Präsentieren Sie nach dem Erstellen eines Entwurfs die zu lösenden Probleme und den Entwurf anderen Personen zur kritischen Überprüfung. Hören Sie sich ihr Feedback an und führen Sie einen Dialog mit ihnen, in dem Sie sich darauf konzentrieren, warum Sie die Entscheidungen getroffen haben, die Sie getroffen haben. Während Sie die Lösung implementieren, werden Sie andere Probleme mit Ihrem Design erkennen. Notieren Sie sich diese und lernen Sie daraus. Es kann auch eine gute Idee sein, mit anderen Personen zusammenzuarbeiten, um die Implementierung anhand des Designs und der Anforderungen zu überprüfen und eine kritische Diskussion über die Gründe zu führen, warum Sie die Dinge getan haben, die Sie getan haben.
Obwohl ich es normalerweise am besten finde, mich mit anderen Leuten von Angesicht zu Angesicht zusammenzusetzen, können hier bei Programmierern spezifische Designfragen gestellt werden. Es gibt auch Stack Exchange-Sites für Codeüberprüfungen und Implementierungsfragen .
quelle
Nach dem Aussehen der Frage, die Sie gestellt haben, sind Sie gerade dabei, sie zu übertreiben. Ich denke, es ist ein häufiges Problem bei Menschen, die die Bedeutung von gutem Design entdecken.
Es ist tatsächlich ein natürlicher und wahrscheinlich sogar notwendiger Schritt mit jeder Fähigkeit, die Sie erlernen. Wenn Sie anfangen, etwas zu lernen, sind Ihre Ergebnisse umso besser, je besser Sie die Kenntnisse einer Fertigkeit vertiefen und je mehr Sie sie anwenden. Das Problem ist, dass Ihr neues Ziel nicht die Qualität Ihrer Ergebnisse ist, sondern wie viel Wissen Sie über Ihre Fähigkeiten gesammelt haben.
Wahre Meisterschaft einer Fähigkeit beinhaltet das Verständnis, wann man sie einsetzt und wann nicht. Eine Überbeanspruchung dieser Fähigkeit ist wahrscheinlich die einzige Möglichkeit, ein solches Verständnis zu entwickeln. Natürlich können Sie darüber lesen, aber Lesen ist kein Ersatz für Erfahrung.
Zum einen ist das Lesen von Designmustern meiner Meinung nach ein schlechter Anfang. Es ist besser, über OO-Konstruktionsprinzipien wie SOLID und GRASP zu lesen . Nachdem Sie sich mit ihnen vertraut gemacht haben, ist es eine gute Idee, gängige Entwurfsmuster zu studieren, denn Sie werden sehen, wie diese Prinzipien angewendet werden können, um konkrete Redewendungen zu bilden.
Es wird behauptet, dass der Sprache tatsächlich ein Merkmal fehlt, wenn beim Gebrauch einer Sprache Muster auftauchen. Obwohl diese Aussage sehr radikal ist, steckt eine Menge Wahrheit darin. Daher würde ich vorschlagen, dass Sie sich andere Sprachen ansehen und damit herumspielen, um ein besseres Verständnis für die Konzepte zu erlangen, die Sie anwenden möchten, und auch, um neue Konzepte kennenzulernen. Eine Auswahlliste wäre Squeak, Ruby und Lisp.
In Bezug auf List ist meine persönliche Empfehlung die Struktur und Interpretation von Computerprogrammen , die mir viel über Design beigebracht hat, indem sie mir zeigt, wie mühelos man robuste Lösungen für komplexe Probleme mit wenig mehr als klarer Abstraktion und (De-) Komposition erstellen kann von oben nach unten.
Folgendes schlage ich vor:
quelle
Wie andere bereits erwähnt haben, werden Sie nur mit Übung und Erfahrung gut zurechtkommen. Es gibt nicht wirklich so viele Abkürzungen, die Sie nehmen können.
Die Tatsache, dass Sie auf Ihre Artikel zurückblicken und nicht mögen, was Sie geschrieben haben, versetzt Sie bereits in die Lage, im Vergleich zu vielen anderen Personen in unserem Beruf die Nase vorn zu haben. Während Sie versuchen, sich zu verbessern, arbeiten wir alle mit Menschen zusammen, die eine 500-Zeilen-Funktion mit 20 Parametern schreiben, die alle als Referenz übergeben werden und von denen 15 [in / out] sind und die glauben, dass sie die Bombe sind weil sie das Chaos zum Laufen gebracht haben.
Wenn es um Software-Design geht, geht es nicht um Schwarz-Weiß. Entweder ist Design gut oder schlecht. Egal wie viel Erfahrung Sie haben, Sie kehren zu einem Teil Ihres alten Codes zurück und überlegen: "Was habe ich geraucht, als ich das geschrieben habe?" Der Schlüssel ist die ständige Bewertung der Dinge und das häufige Durchlaufen der Gedankenübungen, um zu bewerten, was guten Code gut und schlechten Code schlecht macht.
Schließlich ist es immer eine gute Idee, Blogs / Bücher / diese Site immer zu lesen, auch wenn nichts die Übung ersetzt, da andere Leute andere Perspektiven aufzeigen, die Sie möglicherweise nicht in Betracht gezogen haben.
Zu Beginn würde ich diese Bücher empfehlen:
quelle
Up-Front-Design ist nie so gut wie Out-Back-Design. Einfach testen, programmieren und umgestalten. Wenn die Dinge hässlich sind und Sie nicht sicher sind, wie Sie sie bereinigen sollen, versuchen Sie, ein bestimmtes Designmuster zu verwenden. Üben Sie dies eine Weile und andere Entwickler werden sich bald fragen, wie Sie zu solch sauberen Designs kommen.
quelle