Frage

Ich habe ein schlechter Programmierer, weil ich eine Kopie und Paste tue. Ein Beispiel dafür ist, dass jedes Mal wenn ich mit einer Datenbank verbinden und ein Re-Cord abrufen, ich werde den vorherigen Code und bearbeiten, kopieren Sie den Code kopieren, die das Datagridview und bearbeiten setzt. Ich bin der Phrase die Wiederverwendung von Code bewusst, aber ich habe nicht wirklich verwendet es. Wie kann ich die Wiederverwendung von Code nutzen, so dass ich zu dem Datenbank-Code und Datagridview-Code nicht kopieren und einfügen.

War es hilfreich?

Lösung

Je nach Größe des Projektes kann die Antwort ändern.

Für ein kleines Projekt würde ich empfehlen, eine DatabaseHelper Klasse einrichten, die alle ist Ihren DB-Zugriff. Es wäre nur ein Wrapper um das Öffnen / Schließen-Verbindungen und die Ausführung des DB-Code. Dann auf einer höheren Ebene können Sie nur die DBCommands schreiben, die ausgeführt werden.

Eine ähnliche Technik könnte für ein größeres Projekt verwendet werden, würde aber einige zusätzliche Arbeit benötigen, müssen Schnittstellen hinzugefügt werden, DI, sowie abstrahiert, was Sie über die Datenbank wissen müssen.

Sie auch versuchen könnten einen Blick in ORM, DAAB oder über an den Patterns and Practices-Gruppe

Soweit wie der ole C & P zu verhindern? - Nun, wie Sie Ihren Code schreiben, müssen Sie in regelmäßigen Abständen es überprüfen, wenn Sie ähnliche Code-Blöcke haben, dass nur durch einen Parameter variieren oder zwei, das ist immer ein guter Kandidat für die in seine eigene Methode Refactoring

.

Jetzt für mein Pseudo-Code-Beispiel:

Function GetCustomer(ID) as Customer
   Dim CMD as New DBCmd("SQL or Stored Proc")
   CMD.Paramaters.Add("CustID",DBType,Length).Value = ID
   Dim DHelper as New DatabaseHelper
   DR = DHelper.GetReader(CMD)
   Dim RtnCust as New Customer(Dx)
   Return RtnCust
End Function

Class DataHelper
  Public Function GetDataTable(cmd) as DataTable
    Write the DB access code stuff here.
    GetConnectionString
    OpenConnection
    Do DB Operation
    Close Connection
  End Function
  Public Function GetDataReader(cmd) as DataReader
  Public Function GetDataSet(cmd) as DataSet
  ... And So on ...
End Class

Andere Tipps

Das Wesen der Wiederverwendung von Code ist eine gemeinsame Operation zu nehmen und parametrieren, so dass es eine Vielzahl von Eingaben akzeptieren kann.

Nehmen Sie demütig printf, zum Beispiel. Stellen Sie sich vor, wenn Sie nicht printf haben, und hatte nur write, oder etwas ähnliches:

//convert theInt to a string and write it out.
char c[24];
itoa(theInt, c, 10);
puts(c);

Jetzt saugen diese jedes Mal zu schreiben zu haben, und ist eigentlich ganz Buggy. So einige intelligenten Programmierer entschieden, er war müde von diesem und schrieben eine bessere Funktion, die in einem fiel Druck Zeug stdout Schlag.

printf("%d", theInt);

Sie brauchen nicht so schick wie printf zu bekommen damit variadische Argumente und Format-String ist. Auch nur eine einfache Routine, wie:

void print_int(int theInt)
{
    char c[24];
    itoa(theInt, c, 10);
    puts(c);
}

würde den Trick tun nickely. Auf diese Weise, wenn Sie print_int ändern möchten immer auf stderr drucken Sie könnte es aktualisieren, um zu sein:

void print_int(int theInt)
{
    fprintf(stderr, "%d", theInt);
}

und alle Ihre ganzen Zahlen würden jetzt auf magische Weise zu Standardfehler gedruckt werden.

Sie könnten sogar dann bündeln diese Funktion und andere, die Sie in eine Bibliothek aufzuschreiben, die nur eine Sammlung von Code ist, dass Sie sich in Ihrem Programm laden können.

die Praxis der Wiederverwendung von Code Im Folgenden finden, warum Sie auch eine Datenbank zu verbinden: jemand einen Code erstellt auf der Festplatte zu speichern, Aufzeichnungen, überarbeitet, bis sie durch anderen nutzbar waren, und beschlossen, es eine Datenbank zu nennen

Bibliotheken nicht magisch erscheinen. Sie werden von Programmierern erstellt ihr Leben einfacher zu machen und ihnen zu ermöglichen, schneller zu arbeiten.

Sie den Code in eine Routine Setzen und die Routine aufrufen, wenn Sie, dass Code wollen ausgeführt werden.

Gute Faustregel, wenn Sie gleiche Stück dreimal verwenden, und es ist offensichtlich möglich, sie zu verallgemeinern, als es sich um eine Prozedur / Funktion / Bibliothek machen.

Aber, wie ich bin immer älter, und auch erfahren als professioneller Entwickler, ich bin eher geneigt, die Wiederverwendung von Code als nicht immer die beste Idee, um zu sehen, aus zwei Gründen:

  1. Es ist schwierig, zukünftige Bedürfnisse zu antizipieren, so dass es sehr schwer ist, APIs zu definieren, so dass Sie wirklich sie das nächste Mal verwenden würde. Es können Sie doppelt so viel Zeit kosten - wenn man es allgemeinere machen einfach so, dass zweite Mal, wenn Sie es neu zu schreiben sowieso gehen. Es scheint mir, dass vor allem Java-Projekte in der letzten Zeit dazu neigen, scheinen sie immer im Rahmen du jour, neu geschrieben werden nur mehr als „einfacher zu integrieren“ oder was auch immer in die Zukunft.

  2. In einer größeren Organisation (Ich bin ein Mitglied von einem), wenn Sie auf einem externen Team verlassen haben (entweder im Haus oder 3rd-Party), können Sie ein Problem haben. Ihre Zukunft hängt dann von ihrer Finanzierung und ihren Ressourcen. So kann es eine große Belastung zu verwenden, fremden Code oder Bibliothek sein. In ähnlicher Weise, wenn Sie ein Stück Code zu einem anderen Team gemeinsam nutzen, können sie dann erwarten, dass Sie es halten werden.

Hinweis jedoch, diese sind eher wie geschäftliche Gründe, so in Open Source, es fast immer eine gute Sache ist wiederverwendbar zu sein.

, um die Wiederverwendung von Code erhalten Sie einen Meister werden ...

  1. Dinge Namen geben, die ihr Wesen erfassen. Das ist wirklich sehr wichtig
  2. Stellt sicher, dass es nur eine Sache tut. Das ist wirklich kommt zurück auf den ersten Punkt, wenn Sie es nicht von seinem Wesen nennen können, dann ist es zu viel oft tun.
  3. Auffinden der Sache irgendwo logisch. Auch in diesem kommt wieder die Lage, Dinge zu benennen gut zu sein und ihr Wesen erfassen ...
  4. es mit Dingen Gruppierung, die auf einem zentralen Konzept bauen. Wie oben, aber sagte differntly: -)

Das erste, was zu beachten ist, dass Copy-and-Paste unter Verwendung von Code wiederverwenden - wenn auch nicht auf die effizienteste Art und Weise. Sie haben eine Situation erkannt, wo man zuvor mit einer Lösung zu kommen hat.

Es gibt zwei Haupt Bereiche, die Sie bewusst sein müssen, wenn es um die Wiederverwendung von Code zu denken. Zum einen die Wiederverwendung von Code innerhalb eines Projekts und zum anderen die Wiederverwendung von Code zwischen Projekten.

Die Tatsache, dass Sie ein Stück Code, das Sie innerhalb eines Projektes kopieren und einfügen kann, sollte ein Stichwort sein, dass das Stück Code, den Sie bei gesuchten nützlich ist anderswo. Das ist die Zeit, in eine Funktion zu machen, und macht es im Rahmen des Projektes zur Verfügung. Im Idealfall sollten Sie all occurrances diesen Codes mit Ihrer neuen Funktion ersetzen, so dass es (a) redundanten Code reduziert und (b) stellt sicher, dass jeder Fehler in diesem Stück Code nur in einer Funktion statt vielen fixiert werden müssen.

Der zweite Umfang, die Wiederverwendung von Code über Projekte, erfordert etwas mehr Organisation den größtmöglichen Nutzen zu erhalten. Dieses Problem wurde in ein paar anderen SO Fragen zB gerichtet. hier und here .

Ein guter Start ist Code zu organisieren, die sich über Projekte in Quelldateien wahrscheinlich wieder verwendet werden soll, die als wie möglich eigenständig. Minimieren Sie die Menge an Unterstützung, projektspezifischen Code, der erforderlich ist, da dies es einfacher machen, ganze Dateien in einem neuen Projekt wieder zu verwenden. Das bedeutet, die Verwendung von projektspezifischen Datentypen zu minimieren, ist die Verwendung projektspezifischen globale Variablen zu minimieren, etc.

Dies kann bedeuten, Dienstprogramm-Dateien erstellen, die Funktionen enthalten, die Sie kennen Ihre Umgebung sein werden nützlich. z.B. Gemeinsame Datenbank-Funktionen, wenn Sie häufig Projekte zu entwickeln, die auf Datenbanken ab.

Ich denke, der beste Weg, um Ihr Problem zu beantworten ist, dass eine separate Baugruppe für Ihre wichtigen Funktionen erstellen .. Auf diese Weise können Sie Erweiterungsmethoden erstellen oder die Helfer selbst .. denken Sie an dieser Funktion zusammenstellen ändern ..

ExportToExcel (Liste Datum, string filename)

Dieses Verfahren kann die Verwendung für Ihre Zukunft Excel-Export-Funktionen, also warum nicht speichern Sie es in Ihrer eigenen Helfer Montage .. mich auf diese Weise einfach in Bezug auf diese Baugruppen hinzuzufügen.

Für das Beispiel geben Sie die geeignete Lösung ist, eine Funktion zu schreiben, die als Parameter nimmt, was auch immer es ist, dass Sie ändern, wenn Sie den Block einfügen, dann rufen Sie diese Funktion mit den entsprechenden Daten als Parameter.

Versuchen Sie, in die Gewohnheit anderer Leute Funktionen und Bibliotheken.

Sie werden in der Regel feststellen, dass Ihr spezielles Problem eine gut getestet, elegante Lösung.

Auch wenn die Lösungen, die Sie finden nicht eine perfekte Passform, werden Sie wahrscheinlich eine Menge Einblicke in das Problem gewinnen, indem sie zu sehen, wie andere Leute es in Angriff genommen hat.

Ich werde dies tun, auf zwei Ebenen. Zuerst innerhalb einer Klasse oder Namespace, setzt diesen Code Stück, das in diesem Umfang in einem separaten Verfahren wiederverwendet wird und sicherstellen, dass es aufgerufen wird.

Zweitens ist etwas ähnlich den Fall, dass Sie beschreiben. Das ist ein guter Kandidat in einer Bibliothek oder einen Helfer / Utility-Klasse gestellt werden, die breiten wiederverwendet werden kann.

Es ist wichtig, alles zu bewerten, die Sie mit einer Perspektive tun, ob es anderen zur Wiederverwendung zur Verfügung gestellt werden kann. Dies sollte ein grundlegender Ansatz zur Programmierung sein, dass die meisten von uns nicht verwirklichen.

, dass alles beachten Sie, dass Bedarf wiederverwendet werden soll, um im Detail zu dokumentieren. Seine Namenskonvention eindeutig, alle Parameter sein, zurückgehen und alle Zwänge / Einschränkungen / Voraussetzungen, die eindeutig dokumentiert werden benötigt, sollen (im Code oder Hilfe-Dateien).

Es hängt etwas ab, welche Programmiersprache Sie verwenden. In den meisten Sprachen können Sie

  1. Schreiben Sie eine Funktion, parametrieren es Variationen zu ermöglichen
  2. Schreiben Sie eine Funktion Objekt, mit den Mitgliedern der unterschiedlichen Daten zu halten
  3. Entwickeln Sie eine Hierarchie von (Funktionsobjekt?) Klassen, die noch komplizierte Variationen
  4. implementieren
  5. in C ++ Sie auch Vorlagen entwickeln könnten die verschiedenen Funktionen oder Klassen während der Kompilierung
  6. zu erzeugen,

Ganz einfach: wenn Sie fangen sich Copy- Einfügen von Code, nehmen Sie es aus sofort (dh Sie es nicht tun, nachdem Sie bereits Code mehrmals CP'd haben) in eine neue Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top