Ich bin ein Entwickler mit 4 Jahren Erfahrung in .Net-Programmierung und kümmerte mich nie um Design-Muster in meiner Karriere. Vor kurzem wurde ich zu einem Interview mit einem der Biggies in der IT aufgefordert, habe 5 Runden (Problemlösung, Paar-Programmierung, logische Argumentation, 2 Runden Tech-Interview) des Interviews gemacht und habe keinen Job angeboten.
Das Feedback, das ich von ihnen bekommen habe, ist nicht gut in den Designprinzipien, obwohl sie mit meiner technischen & amp; logische Denkfähigkeiten. Dieser hat mich dazu gebracht, zu denken, dass das Wissen um Entwurfsmuster der einzige Weg ist, um die Probleme zu lösen?
Obwohl ich in meiner Programmierung nie viele Designmuster verwendet habe, habe ich immer versucht, die Grundprinzipien von OOPS umzusetzen.
Ich könnte diese Prinzipien verwenden, um ein System zu entwerfen, das lose gekoppelt und offen für Erweiterungen und einfach zu warten ist. Eventuell sind dies die Kernkonstrukte aller Entwurfsmuster.
Aber mein Problem ist, ein richtiges Muster für das richtige Problem zu finden. Ich weiß, dass dieses Wissen nicht nur durch das Lesen aller in Entwurfsmustern und -praktiken veröffentlichten Bücher entsteht. Dieses Wissen beinhaltet die Erfahrung, verschiedene Systeme zu bauen.
Gibt es Anwendungsfälle für das Muster-Problem-Matching ? Und Ihren Vorschlag zum Lernen von Designprinzipien?
Prost
Obwohl ich denke, dass es nicht schaden kann, sich mit Design Mustern vertraut zu machen, möchte ich sicherstellen, dass es in Ihrer Frage keine zwei Punkte gibt. Sie sagten, dass das Feedback, das Sie erhalten haben, dass Ihre Fähigkeit, Design Prinzipien anzuwenden, schwach ist, und Sie daraus geschlossen haben, dass Sie Design Patterns studieren müssen. Aber das ist anders.
Ein "Entwurfsmuster" ist ein wiederkehrendes Muster, das Sie in vielen verschiedenen Domänen sehen. In der Architektur sehen Sie zum Beispiel das Muster des "Innenhofs" in vielen verschiedenen Arten von Gebäuden. Bei der Programmierung sehen Sie Muster wie "Klasse, die nur eine einzige Instanz haben kann" oder "kleine Menge Code, die das daran klebt" in vielen verschiedenen Arten von Programmen.
Aber Prinzipien sind keine Muster. Ein Muster ist eine bestimmte wiederkehrende Art von Design; Ein Prinzip ist eine Idee, die dem zugrunde liegt, was ein Design für die Benutzer des entworfenen Artefakts gut macht.
Zum Beispiel ist ein Designprinzip der JScript-Sprache "Vergebung kleiner Fehler". Wenn Sie ein Datumsobjekt für den 31. November erstellen, korrigiert es dies stillschweigend bis zum 1. Dezember statt einen Fehler anzugeben. Es gibt kein "kleines Fehlerverzeihungsmuster". Design-Fehler-tolerant zu machen ist ein Design Prinzip - wenn wir die Wahl haben, wie man ein bestimmtes Feature designt, überlegen wir, wie gut es mit all den Prinzipien übereinstimmt - von denen einige widersprüchlich sind - und verwenden Sie diese, um das Design des Features zu leiten.
Dies ist nicht ein Designprinzip von C #; Das Gegenteil ist ein Konstruktionsprinzip von C #. Designprinzipien sind an sich nicht gut oder schlecht; Sie sind Richtlinien dafür, was ein Design für seine Zielbenutzergruppe gut macht .
Das Schreiben von Code ohne verständliche Muster bedeutet, dass Sie nicht über die Tools in Ihrer Toolbox verfügen, die das Ausführen allgemeiner Aufgaben erleichtern. Code zu schreiben, ohne Designprinzipien zu verstehen, bedeutet Code zu schreiben, der inkonsistent, schwer verständlich und den Bedürfnissen seiner Benutzer entgegengesetzt ist. Beide sind wichtig, aber sie sind sehr unterschiedlich.
Entwurfsmuster werden Muster genannt, weil sie immer wieder in vielen unabhängigen Programmen auftauchen, nicht weil sie dazu dienen, Programme auf die gleiche Art und Weise zusammenzusetzen, wie Quadrate zusammengefügt werden eine Steppdecke. Sie können helfen, zu einer Lösung für ein Softwareproblem zu führen, aber sie sind keine Lösung für sich.
Obwohl Sie C # verwenden, würde ich vorschlagen, einige Bücher über Muster zu lesen. Zuerst wäre das GoF-Buch - Design Pattens . Versuchen Sie dann, ein Buch über Enterprise Design Patterns zu lesen. Während Sie lesen, werden Sie das Muster erkennen (oder sehen). Dies ist im Allgemeinen ein "Aha" -Moment.
Sie erkennen das auch an Ihrem eigenen Code. Das Wissen über Muster hilft dir bei der Gestaltung. Es hilft, die Muster zu kennen, da Sie sofort das Muster erkennen werden, wenn ein Problem damit auftaucht
Die von Ihnen angegebenen Programmiergrundsätze sind gut und befolgen Sie sie. Sie sind jedoch eher auf Klassenebene. Wenn Sie weiter zum Systemdesign gehen, sind Patterns hilfreicher.
Am wichtigsten - Patterns geben Ihnen ein Vokabular, um Design-Ideen mit dem ganzen Team zu diskutieren.
Ich bin sicher, dass Sie einige Entwurfsmuster verwendet haben, wenn Sie seit 4 Jahren programmiert haben, obwohl Sie vielleicht nicht wissen, dass Sie das getan haben.
Das Entwurfsmuster wird Ihnen beibringen, ein Problem zu lösen, das jemand bereits durchgemacht hat und eine Lösung dafür gefunden hat. und schließlich für uns dokumentiert.
Wenn Sie Design Patterns lernen möchten, können Sie mit "Head First Design Patterns" beginnen, es ist ein großartiges Buch.
Ich bin mir nicht sicher, was Sie wirklich brauchen, sind Entwurfsmuster. Sie benötigen wahrscheinlich mehr allgemeines Verständnis von Design. Mehr Ratschläge dazu geben, wird ohne weitere Informationen schwierig.
Entwurfsmuster (wie im GoF-Stil) funktionieren am besten mit einem bestimmten Schreibstil. Stellen Sie sich Ihre Klassen nicht als Dinge vor, sondern als Menschen. Stellen Sie sich vor, dass diese Menschen dann miteinander kommunizieren, etwa durch das Verteilen von Notizen oder durch die Korrespondenz zwischen Abteilungen oder so.
Im Allgemeinen sind die Art und Weise, in der diese Leute kommunizieren, und die Muster des Nachrichtenflusses den GoF-Entwurfsmustern sehr ähnlich. Die Muster, die nicht dazu passen, sind normalerweise "Helfer", die benötigt werden, um Anwendungen zu schreiben, die zu diesem Modell passen.
Probieren Sie dieses Buch, es ist lustig und gibt Ihnen nicht nur, wie Sie das Muster implementieren, auch wenn Sie es tun.
Tags und Links language-agnostic c# design-patterns