webentwicklung-frage-antwort-db.com.de

Wie macht man Code wiederverwendbar?

Jeder Code kann auf die eine oder andere Weise wiederverwendet werden, zumindest wenn Sie den Code ändern. Zufallscode ist als solcher nicht sehr wiederverwendbar. Wenn ich einige Bücher lese, sagen sie normalerweise, dass Sie den Code explizit wiederverwendbar machen sollten, indem Sie auch andere Situationen der Code-Nutzung berücksichtigen. Bestimmter Code sollte jedoch auch keine allmächtige Klasse sein.

Ich hätte gerne wiederverwendbaren Code, den ich später nicht ändern muss. Wie macht man Code wiederverwendbar? Welche Voraussetzungen müssen erfüllt sein, damit Code wiederverwendbar ist? Welche Dinge sollte wiederverwendbarer Code auf jeden Fall haben und welche Dinge sind optional?

42
Silvercode

Siehe 10 Tipps zum Schreiben von wiederverwendbarem Code für Hilfe.

  1. Behalten Sie den Code TROCKEN. Trocken bedeutet "sich nicht wiederholen".
  2. Machen Sie eine Klasse/Methode nur für eine Sache.
  3. Schreiben Sie Komponententests für Ihre Klassen UND machen Sie es einfach, Klassen zu testen.
  4. Entfernen Sie die Geschäftslogik oder den Hauptcode aus einem beliebigen Rahmencode
  5. Versuchen Sie, abstrakter zu denken, und verwenden Sie Interfaces und Abstract-Klassen.
  6. Code für die Erweiterung. Schreiben Sie Code, der in der Zukunft problemlos erweitert werden kann.
  7. Schreiben Sie keinen Code, der nicht benötigt wird.
  8. Versuchen Sie, die Kopplung zu reduzieren.
  9. Seien Sie modularer
  10. Schreiben Sie Code, wie Ihr Code eine externe API ist
56
Galwegian

Wenn Sie den Test-Driven Development-Ansatz verwenden, wird Ihr Code nur noch als Refactor für zukünftige Szenarien wiederverwendbar.

Ich persönlich finde, dass durch ständiges Refactoring sauberer Code erzeugt wird, als zu versuchen, zu erraten, für welche Szenarien ich eine bestimmte Klasse codieren muss.

14
Duncan

Die Wartbarkeit macht Code vor allem wiederverwendbar.

Wiederverwendbarkeit ist an sich selten ein lohnendes Ziel. Es ist eher ein Nebenprodukt des Schreibens von Code, das gut strukturiert, leicht zu pflegen und nützlich ist.

Wenn Sie wiederverwendbaren Code erstellen möchten, versuchen Sie häufig, die Anforderungen an das Verhalten zu berücksichtigen, die in zukünftigen Projekten erforderlich sind. Egal wie gut Sie dabei werden, Sie werden feststellen, dass Sie diese Anforderungen an die Zukunftssicherheit falsch verstehen.

Auf der anderen Seite, wenn Sie mit den nackten Anforderungen des aktuellen Projekts beginnen, werden Sie feststellen, dass Ihr Code sauber und straff und elegant sein kann. Wenn Sie an einem anderen Projekt arbeiten, das eine ähnliche Funktionalität benötigt, passen Sie Ihren ursprünglichen Code natürlich an.

Ich schlage vor, die Best Practices für die von Ihnen gewählte Programmiersprache/Paradigma (z. B. Patterns und SOLID für Java/C # -Typen), die Lean/Agile-Programmierliteratur und (natürlich) das Buch "Code Komplett". Wenn Sie die Vor- und Nachteile dieser Ansätze verstehen, wird Ihre Kodierungspraxis ohne Ende verbessert. Der gesamte Code wird dann wiederverwendbar - jedoch eher "zufällig" als beabsichtigt.

Siehe auch hier: Pflegbaren Code schreiben

11
Kramii

Für die meisten Definitionen von "Wiederverwendung" ist die Wiederverwendung von Code zumindest nach meiner Erfahrung ein Mythos. Kannst du sagen, dass ich einige Narben davon habe? :-) 

Mit der Wiederverwendung meine ich nicht, dass Sie vorhandene Quelldateien nehmen und zur Übergabe bringen, bis eine neue Komponente oder ein neuer Service ausfällt. Ich meine, eine bestimmte Komponente oder Dienstleistung nehmen und ohne Änderungen weiterverwenden.

Ich denke, der erste Schritt besteht darin, sich in eine Denkweise zu versetzen, dass mindestens drei Iterationen erforderlich sind, um eine wiederverwendbare Komponente zu erstellen. Warum 3 Beim ersten Versuch, eine Komponente wiederzuverwenden, entdecken Sie immer etwas, mit dem sie nicht umgehen kann. Dann musst du es ändern. Dies geschieht ein paar Mal, bis Sie schließlich eine Komponente haben, die zumindest wiederverwendbar erscheint.

Der andere Ansatz ist ein teures vorausschauendes Design. Aber dann sind die Kosten im Voraus und die Vorteile (können) erscheinen einige Zeit später. Wenn Ihr Chef darauf besteht, dass der aktuelle Projektzeitplan immer dominiert, funktioniert dieser Ansatz nicht.

7
RoadWarrior

Die Objektorientierung ermöglicht es Ihnen, Code in Superklassen umzuwandeln. Dies ist möglicherweise die einfachste, billigste und effektivste Art der Wiederverwendung. Gewöhnliche Klassenvererbung erfordert nicht viel Nachdenken über "andere Situationen"; Sie müssen keinen "omnipotenten" Code erstellen.

Über die einfache Vererbung hinaus ist Wiederverwendung mehr als Sie erfinden. Sie finden Wiederverwendungssituationen, wenn Sie eines Ihrer eigenen Pakete wiederverwenden möchten, um ein etwas anderes Problem zu lösen. Wenn Sie ein Paket wiederverwenden möchten, das nicht genau in die neue Situation passt, haben Sie zwei Möglichkeiten.

  1. Kopieren Sie es und reparieren Sie es. Sie müssen jetzt fast ähnliche Pakete haben - ein kostspieliger Fehler.

  2. Machen Sie das Originalpaket in zwei Situationen wieder verwendbar.

Mach das einfach zur Wiederverwendung. Nichts mehr. Zu viel Nachdenken über "mögliche" Wiederverwendung und undefinierte "andere Situationen" kann zu Zeitverschwendung werden.

5
S.Lott

Sie schreiben verschiedene Module (Teile), wenn Sie ein relativ großes Projekt schreiben. In der Praxis wiederverwendbarer Code bedeutet, dass Sie Bibliotheken erstellen müssen, die von anderen Projekten verwendet werden können, die dieselbe Funktionalität benötigen.

Daher müssen Sie Module identifizieren, die wiederverwendet werden können

  1. Identifizieren Sie die Kernkompetenz jedes Moduls. Wenn Ihr Projekt beispielsweise Dateien komprimieren muss, verfügen Sie über ein Modul, das die Dateikomprimierung übernimmt.NICHTMehr als ONE THING machen. Eine Sache nur.

  2. Schreiben Sie eine Bibliothek (oder Klasse), die die Dateikomprimierung handhabt, ohne mehr als die zu komprimierende Datei, die Ausgabe und das Komprimierungsformat zu benötigen. Dadurch wird das Modul vom restlichen Projekt entkoppelt und kann in einer anderen Einstellung (erneut) verwendet werden.

  3. Sie müssen es beim ersten Mal nicht perfekt machen. Wenn Sie die Bibliothek tatsächlich wiederverwenden, werden Sie wahrscheinlich Mängel im Design feststellen (z. B. haben Sie sie nicht modular genug gemacht, um neue Komprimierungsformate problemlos hinzufügen zu können.) Sie können sie beim zweiten Mal korrigieren und die Wiederverwendbarkeit Ihres Moduls verbessern. Je mehr Sie es wiederverwenden (und die Fehler beheben), desto einfacher wird es, es wiederzuverwenden.

Das Wichtigste, das zu beachten ist, ist die Entkopplung. Wenn Sie eng gekoppelten Code-Wiederverwendbarkeit schreiben, ist dies der erste Unfall. 

Belassen Sie den erforderlichen Status oder Kontext außerhalb der Bibliothek. Fügen Sie Methoden hinzu, um den Status der Bibliothek anzugeben.

5
Vinko Vrsalovic

Andere haben diese Taktik erwähnt, aber hier sind sie formal. Diese drei werden Sie sehr weit bringen:

  • Befolgen Sie die Einzelverantwortung Prinzip - es sorgt dafür, dass Ihre Klasse nur "eine Sache" tut, was bedeutet, dass sie wahrscheinlich für eine andere Anwendung wiederverwendbar ist, die dasselbe enthält.
  • Halten Sie sich an das Liskov Substitutionsprinzip - es sorgt dafür, dass Ihr Code "tut, was er ohne Überraschungen tun soll", was bedeutet, dass er wahrscheinlich für eine andere Anwendung wiederverwendbar ist, die das Gleiche tun muss.
  • Befolgen Sie das Open/Closed-Prinzip - Es sorgt dafür, dass Ihr Code sich ohne Änderung des Quellcodes anders verhält, was bedeutet, dass er ohne direkte Änderung wahrscheinlich wiederverwendbar ist.
4
bzlm

Um zu den oben genannten Elementen hinzuzufügen, würde ich sagen:

  • Machen Sie die Funktionen allgemein, die Sie wiederverwenden müssen
  • Verwenden Sie Konfigurationsdateien und stellen Sie sicher, dass der Code die in files/db definierten Eigenschaften verwendet
  • Beziehen Sie Ihren Code eindeutig in solche Funktionen/Klassen ein, die unabhängige Funktionen bieten und in verschiedenen Szenarien verwendet werden können, und definieren Sie diese Szenarien mithilfe der Konfigurationsdateien
1
Salman Kasbati

Ich würde das Konzept "Klassenzusammensetzung über Klassenvererbung" hinzufügen (das hier von anderen Antworten abgeleitet wird). Auf diese Weise kümmert sich das "zusammengesetzte" Objekt nicht um die innere Struktur des Objekts, von dem es abhängig ist - nur sein Verhalten, was zu einer besseren Verkapselung und einfacheren Wartbarkeit führt (Tests, weniger zu beachtende Details). In Sprachen wie C # und Java ist dies häufig von entscheidender Bedeutung, da es keine Mehrfachvererbung gibt. Dies hilft, Vererbungsgraphiken zu vermeiden, die zur Hölle gehören könnten. 

1
reshefm

Wie bereits erwähnt, ist modularer Code mehr wiederverwendbar als nicht modularer Code.

Eine Möglichkeit, den modularen Code zu unterstützen, besteht in der Verwendung der Kapselung. Die Theorie der Kapselung finden Sie hier: http://www.edmundkirwan.com/

Ed.

1
Ed Kirwan

Das Rad nicht neu erfinden. Das ist es. Und das allein hat viele oben erwähnte Vorteile. Wenn Sie etwas ändern müssen, erstellen Sie einfach einen weiteren Code, eine andere Klasse, eine andere Konstante, eine Bibliothek usw., und es hilft Ihnen und den übrigen Entwicklern, in derselben Anwendung zu arbeiten.

1
Ricardo Sanchez

Kommentar, im Detail , alles, was scheint, könnte verwirrend sein, wenn Sie das nächste Mal zum Code zurückkehren. Übermäßig wortreiche Kommentare können etwas ärgerlich sein, aber sie sind weitaus besser als spärliche Kommentare und sparen Stunden, wenn Sie versuchen, die WTF herauszufinden, die Sie beim letzten Mal gemacht haben.

0
naught101