brauche Gedanken zu meiner Interviewfrage - .net, c #

9

Eine der Fragen, die mir gestellt wurden, war, dass ich eine Datenbanktabelle mit folgenden Spalten habe:

%Vor%

Ich muss eine c # -App schreiben, um die Dateien von der aktuellen Position in die neue Position zu verschieben und die Statusspalte entweder als "ERFOLG" oder als "FEHLER" zu aktualisieren.

Das war meine Antwort

  1. Erstellen Sie eine Liste aller Datensätze mit linq

  2. Erstellen Sie ein Befehlsobjekt, das Dateien verschieben soll

  3. Mit foreach rufen Sie einen Delegaten zum Verschieben der Dateien auf -

  4. Verwenden Sie endinvoke, um eine Ausnahme zu erfassen und die Datenbank entsprechend zu aktualisieren

Mir wurde gesagt, dass das Befehlsmuster und der Delegierte die Rechnung hier nicht erfüllten - ich wurde gebeten, ein günstigeres GoF-Muster zu denken und umzusetzen.

Nicht sicher, was sie gesucht haben - In der heutigen Zeit halten Kandidaten eine Menge Informationen über den Kopf, da man immer Google hat, um irgendeine Antwort zu finden und eine Lösung zu finden.

    
uno 25.03.2010, 02:12
quelle

3 Antworten

3

Ich stimme Aaronaught's Kommentar oben zu. Für ein Problem wie dieses können Sie es manchmal überdenken und versuchen, etwas mehr zu tun, als Sie eigentlich tun müssen.

Das heißt, das eine GoF-Muster, das mir in den Sinn kam, war "Iterator". In Ihrer ersten Aussage sagten Sie, Sie würden alle Datensätze in eine Liste einlesen. Die einzige Sache, die damit problematisch sein könnte, ist, wenn Sie Millionen dieser Datensätze haben. Wahrscheinlich möchten Sie sie mehr nacheinander verarbeiten, anstatt die gesamte Liste in den Speicher zu schreiben. Das Iterator-Muster würde Ihnen die Fähigkeit geben, über die Liste zu iterieren, ohne den zugrunde liegenden (Datenbank-) Speicher- / Abrufmechanismus zu kennen. Die zugrunde liegende Implementierung des Iterators könnte jeweils einen, zehn oder hundert Datensätze abrufen und diese auf Anforderung an die Geschäftslogik weiterleiten. Dies würde auch einige Testvorteile bringen, da Sie Ihre andere "Geschäftslogik" mit einem anderen Typ von zugrunde liegendem Speicher (z. B. In-Memory-Liste) testen könnten, sodass Ihre Komponententests unabhängig von der Datenbank wären.

    
Andy White 25.03.2010 02:25
quelle
2

Ein tiefgreifendes Verständnis von Mustern ist etwas, das Sie als Entwickler unbedingt haben sollten - Sie sollten nicht zu Google gehen müssen, um zu bestimmen, welches Muster zu verwenden ist, weil Sie nicht genug Zeit haben werden, um dieses Muster wirklich zu verstehen Sie fangen an, darüber zu lesen und wenn Sie es anwenden.

Bei Patterns geht es hauptsächlich darum, Kräfte zu verstehen und Variationen zu kapseln. Das heißt, Kräfte erzeugen bestimmte Arten von Variationen, und wir haben gute Möglichkeiten, diese Arten von Variationen einzukapseln. Ein "Muster" ist ein Körper des Verständnisses darüber, welche Kräfte zu welchen Arten von Variation führen und welche Methoden der Verkapselung diese am besten adressieren.

Ich habe einen Freund, der einen Kurs über Muster lehrte und es fiel ihm plötzlich auf, dass er ein gegebenes Problem "using" (was "die Verkapselungstechnik implementiert") jedes Muster in seinem Kursbuch lösen würde. Es hat wirklich einen großen Job dabei geholfen, die Tatsache nach Hause zu bringen, dass das Finden der richtigen Technik wichtiger ist als das Wissen, wie man eine Technik anwendet.

Das Muster Command zum Beispiel beginnt mit dem Verständnis, dass wir manchmal variieren wollen, wenn etwas passiert. In diesen Fällen wollen wir die Entscheidung, was zu tun ist, von der Entscheidung, wann wir es tun sollen, entkoppeln. In diesem Beispiel sehe ich keinen Hinweis darauf, dass wenn der Befehl ausgeführt wird, überhaupt variiert.

Tatsächlich sehe ich nicht wirklich etwas, das variiert, so dass es möglicherweise überhaupt keine Muster in dem Problem gab. Wenn Ihre Interviewer das sagten, dann könnten sie auch etwas lernen.

Anywho ... Ich würde Design Patterns Explained von Shalloway und Trott empfehlen. Sie werden ein tieferes Verständnis davon bekommen, für welche Muster es wirklich ist und wie sie Ihnen helfen, Ihre Arbeit zu erledigen, und wenn sie Ihnen das nächste Mal sagen, dass Sie das falsche Muster "benutzen", könnten Sie sie einfach erziehen. Das scheint mir ziemlich gut zu gehen ... ungefähr 20% der Zeit. :)

    
MaxGuernseyIII 25.03.2010 02:31
quelle
0

Ich würde eher sagen, dass der Interviewer wollte, dass Sie das SOLID verwenden (oder erwähnen) Objektorientierte Designprinzipien hier, und in diesem Prozess könnten Sie ein Designmuster verwenden.

Zum Beispiel könnten wir ein Design wie unten machen, das sich an SRP, OCP und DIP hält.

%Vor%     
Manish Basantani 05.03.2011 20:12
quelle

Tags und Links