Wie sind Sie zu guten Praktiken für Ihre OOP-Entwürfe gekommen? [geschlossen]


12

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?


Was ist dein aktuelles Level? Ich nehme an, Sie kennen sich mit Designmustern aus?
ACNB,

Tatsächlich habe ich überhaupt nicht begonnen, einige davon im PluralSight-Kurs zu lesen
Darf Zon

1
Eines der einflussreichsten Bücher im Bereich Software-Design ist Design Patterns: Elements of Reusable Object-Oriented Software. Es lohnt sich immer noch zu lesen, obwohl es jetzt ein bisschen veraltet ist. Sie können auch mit dem Lesen der [ en.wikipedia.org/wiki/Software_design_pattern weiblicher ( Wikipedia- Artikel) beginnen. Diese Software-Entwurfsmuster bieten Ihnen nicht nur eine gute Lösung für häufig auftretende Probleme, sondern sind jetzt auch Teil der Fachterminologie.
ACNB,

1. Schreiben - 2. Rezension (einschließlich Lesen von Literatur und Sites wie P.SE) - 3. Refactor - 4. Wiederholen
HorusKol

es gibt keinen ersatz für erfahrung, es gibt keine

Antworten:


14

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 .


4

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:

  1. schreibe Code (und versuche zu verstehen, was ihn schlecht macht)
  2. Code lesen (und versuchen zu verstehen, was ihn gut macht)
  3. Wissen mit anderen Menschen austauschen. Stellen Sie Ihre Ideen auf die Probe.

Das ist ein ausgezeichneter Rat! Ich bin gerade dabei, meine Kenntnisse über Entwurfsmuster anzuwenden, wie in meiner Diskussion mit Kevin hier zu sehen ist
TheSilverBullet,

3

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:

  • Agile Prinzipien, Muster und Praktiken in C # - Ich bin selbst 3/4 durch dieses Buch. Einer der wichtigsten Punkte, den der Autor hervorhebt, und ich stimme dem zu 100% zu, beginnen Sie nicht damit, ein Problem zu lösen, indem Sie nach einem anzuwendenden Designmuster suchen. Halten Sie die Dinge so einfach wie möglich und entwickeln Sie den Code zu einem Muster, wenn die Alternative komplizierter wird.
  • Head First Design Patterns - Ich habe dieses Buch noch nicht gelesen und in IMO richten sich viele Head First-Serien speziell an Neulinge auf dem Gebiet. Sie neigen dazu, einfacher zu sein, aber ich habe viele gute Antworten von anderen über dieses Buch gehört / gelesen

1
+1: "Halte die Dinge so einfach wie möglich" ... "Entwickle den Code zu einem Muster ..."
Kevin Cline

1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.