Frage

Wir schreiben alle wieder verwendbaren Klassen und Code.

Wir Faktor in Konfigurierbarkeit, damit wir diese fantastische neue Klasse wieder und wieder verwenden.

Wir sagen unseren Chefs, dass jetzt diese zusätzliche Zeit zu verbringen, sparen wir Zeit und Geld später.

Aber in Wirklichkeit, für diejenigen von uns, die nicht schreiben Bibliotheken von Drittanbietern und unsere Zeit damit verbringen, auf einer Anwendung als Ganzes funktioniert, wie oft tut, dass eine Klasse, die Sie zusätzliche Zeit verbrachte das Schreiben tatsächlich wiederverwendet werden erhalten wiederverwendet in einem anderen Projekt?

Wie viele maßgeschneiderte Klassen tun Sie in Ihrer Bibliothek haben, die in mehr als einem Projekt verwendet werden erhalten?

War es hilfreich?

Lösung

Meine gemeinsame Faustregel gilt:

  1. Wenn Sie es einmal wiederholen, kopieren Sie es.
  2. Wenn Sie es zweimal wiederholen, Refactoring es.

Andere Tipps

Gute Frage!
Ich denke, „für den Wiedereinsatz der Gestaltung“ ist der falsche Weg um. Ich finde, dass der Code, den ich schreibe, zu arbeiten, sauber und schön wiederverwendbar ist. Actual Design für den Wiedereinsatz geschieht nur die erste dieser Code Zeit wird tatsächlich wiederverwendet!

Die Ausgaben Zeit vorher versucht, etwas wiederverwendbar neigt zu machen ist eine Verschwendung von Zeit zu sein, weil man nie wissen, was muß wiederverwendet werden.

aber sagte, dass in meinem Job haben wir eine Sammlung von Bibliotheken (groß, 500 MB oder mehr), die für fast jedes Projekt wiederverwendet wird -. Meist domänenspezifische Sachen

leppie schrieb:

  

Meine gemeinsame Faustregel gilt:

     
      
  1. Wenn Sie es einmal wiederholen, kopieren Sie es.
  2.   
  3. Wenn Sie es zweimal wiederholen, Refactoring es
  4.   

Und ich möchte hinzufügen, stellen Sie sicher, dass ein Kommentar zu hinzugefügt wird beide Teile des Codes der Vervielfältigung im Falle, um anzuzeigen, es ist ein Fehler ist. Sie wollen nicht, es in einem Teil reparieren und nicht die andere (BTDTGTT).

Rob

Ich bin kein Experte in XP-Methodik (oder jede Methode), aber ich denke, die YAGNI Prinzip hier könnte angewendet.

Nur den Code für die Wiederverwendung ändern, wenn Sie auf Haben es wieder zu verwenden.

Es gibt einen Unterschied zwischen Konfigurierbarkeit und reusability- erstere in vielen verschiedenen Situationen sehr nützlich sein kann, wenn sich die Umgebung ändert oder was auch immer anderswo die Dinge konfigurierbar in der Art, wie ich es verstehe, ist vor allem ein Fall der Trennung von Code und Data- das ist nur gute Praxis wirklich.

Planung für Wiederverwertbarkeit ist nur dann wirklich sinnvoll, wenn Sie etwas zu schaffen Sie als Bibliothek für mehrere Projekte verwenden möchten. Im Laufe der Jahre gehe ich zunehmend bewusst geworden das YAGNI Prinzip und dieser Tage, die ich sauber und robust Code für die Aufgabe schreiben einfach zielen. Meine Erfahrung ist, dass, wenn etwas wird wiederverwendet wird es sehr unwahrscheinlich ist, dass Sie genau vorhersagen, wie es muß wieder verwendet werden, so dass es viel besser ist, nur den Code hinzufügen, die Sie jetzt brauchen . Auf diese Weise, wenn Sie es brauchen in Zukunft wiederverwenden können Sie neue Sachen hinzufügen, die genau das tut, was Sie brauchen, ohne eine vorhandene Funktionalität zu brechen hat, die Sie in der Vergangenheit schrieb versucht zu antizipieren, wie Sie es jetzt brauchen könnte.

Sie können feststellen, dass nach diesem ein paar Mal tun haben Sie eine Bibliothek, die stabil und robust ist und Sie es zu ändern nicht braucht, weil sie alle tatsächlich tut das, was du mir bedarfs- es ist viel einfacher zu ermöglichen, dass in diesem evolutionären Weg zu passieren, als zu viel Zeit zu verlieren die Zukunft raten zu.

Ich denke, dass der beste Ansatz ist, und Design-Code mit guten Schnittstellen und Trennung der Verantwortlichkeit zwischen den Klassen, um zu versuchen, ohne zu viele Sorgen um die Wiederverwendung. Aber zumindest, wenn Sie auf diese Weise entwerfen Sie verlassen offen die Möglichkeit der Wiederverwendung. Eine gute Faustregel ist, sich zu fragen, „wenn ich nach 3 Monaten zu diesem Code zurückkommen, werde ich es verstehen, und ich konnte es verlängern, wenn ich musste?“

IMO eine der schlimmsten Praktiken in der Branche ist, wenn ein Team grünes Licht gegeben wird, ihren eigenen „wiederverwendbar“ Rahmen zu gehen und schreiben ....

Ich mag das LISP-Modell, wo man ständig die Sprache erweitern. Schließlich wickeln Sie mit einer domänenspezifischen Sprache für Ihre Problemdomäne auf. Nicht, dass ich jede Lisp tatsächlich schreiben, aber in den Sprachen, die ich am häufigsten verwenden --- Lua und C jetzt --- ich in der Regel etwas herausziehen in ein Modul und wiederverwenden, anstatt Klon und ändern.

Für einen C-Programmierer, das Beispiel für diesen Ansatz ist Buch Dave Hanson C Schnittstellen und Implementationen . Dave nahm jede wiederverwendbare Idee, die er in schriftlicher Form drei oder vier Compiler gehabt hatte und sie alle in einem Buch --- und die Software ist kostenlos. Fabulous Sachen. Nun, wenn ich C-Code schreiben, und ich will es ein zweites Mal verwenden, mache ich eine Schnittstelle in Hanson Stil. Einige Dinge, die ich tat, diesen Begriff: 2-dimensionalen Arrays, 2-dimensionaler Arrays mit Blockierung, 2-dimensionale Bitmaps, Leser und Schreiber für pbmplus-Dateien und so weiter. Mit dieser Infrastruktur war es einfach, ein Programm zu schreiben, die ich seit Jahren habe gefehlt, die von Scans von Fotokopien von Buchseite schwarze Ränder zu entfernen ist.

Also ich stimme mit wem auch immer gesagt, wenn Sie es wieder verwenden wollen, ziehen Sie es heraus --- aber nicht vor.

IMHO ist bestimmter Code wahrscheinlich oft wiederverwendet wird, und es macht Sinn es für häufige Wiederverwendung vorzubereiten. Andere Code ist nicht, und wahrscheinlich muss nicht über die Lösung der unmittelbaren Probleme entwickelt werden.

Natürlich müssen beachten Sie, dass Sie den Unterschied zu sagen ist NP-hart. :)

Wenn Sie sicher sind, dass Sie es nicht wieder gehen zu müssen, nicht die Mühe. Nicht einmal, wenn Sie denken, es könnte in handliches kommen. Umgestalten es, wenn Sie es wirklich brauchen wieder ...

Doch nicht wieder verwendbar zu machen ist keine Entschuldigung dafür, nicht transparent zu machen. Immer, wenn ich Code so transparent wie möglich zu schreiben, es stellt sich immer aus 99% wiederverwendbar schon sein ...

Wenn Sie über dem Niveau des technischen Dienstprogramme bekommen habe ich sehr wenig tatsächliche Wiederverwendung in der realen Welt zu sehen.

Wenn Sie es denken über die Gründe dafür sind klar. Sagen Sie den widget_bodger Anwendung 90% der Funktionalität enthalten Sie benötigen, als Sie die fehlende Funktionalität der Anwendung nur noch hinzufügen würde.

Oder sagen das Geschäft ein wirklich cool „Piep“ -Funktion in der widget_bodger bewundert und wollte es in die gernerate_executive_expenses Anmeldung aufgenommen. Ah resuse Sie vielleicht denken, aber dann graben Sie in den Code und finden, dass GEE Anwendung eine der ältesten Anwendungen im Unternehmen ist, ist in C geschrieben, müssen hochverfügbare Hardware laufen auf und das einzige, was resuable ist der Grundalgorithmus .

Es gibt sehr unterschiedliche Meinungen darüber, was Code wiederverwendbar macht. Ich würde sagen, dass Ihre gut investierte Zeit, den Code klar und gut einkalkuliert machen (das heißt Trennung zwischen Aufgaben).

Ein positiver Nebeneffekt davon ist besser Wiederverwertbarkeit. Der Hauptvorteil macht den Code leichter zu verstehen, zu ändern und zu debuggen.

Um es einpacken. Keine komplexen Konfigurationsschemata, Erweiterungspunkte und Veranstaltungen tun, nur um sie wiederverwendbar zu machen. Versuchen Sie, die richtigen beweglichen Teile zu finden, so dass der Code als Reaktion auf neue Bedürfnisse bestehen.

Oft „wiederverwendbar“ Code Code ist, abstrahiert und modularisiert ist, und für mich ist der Hauptvorteil nicht Wiederverwertbarkeit, sondern erhöht die Testbarkeit. Denn wenn Sie Code isolieren und modularisieren wird es in der Regel mehr prüfbar. Reuse ist eine bequeme, aber oft ungenutzt Nebenwirkung.

Und auf einer anderen Anmerkung, Juval Lowry befürwortet Interface-basierte Programmierung, da er behauptet, dass Schnittstellen die einzige Komponente der Wiederverwertbarkeit ist. Alles andere hat Funktionalität impliziert (schwer wieder zu verwenden), während Schnittstellen einen Vertrag nur definieren, die implizit wiederverwendbar ist.

Ich stimme Ihnen zu, soweit es bei der Codierung in einer Art und Weise kein Punkt ist, dass die Klasse einfach zu bedienen außerhalb der aktuellen Anwendung macht. Die meisten, wenn wir dies nicht tun und in Business-Umgebungen gibt es keine Notwendigkeit zu. Wenn eine andere Anwendung diese Funktionalität zu einem späteren Zeitpunkt muss dann extrahiert und commonalising den Code kann als Teil dieses zweiten Projekts durchgeführt werden, und das Management sind wahrscheinlich mit diesem Standpunkt einigen.

Allerdings ist es gute Praxis, den Code wiederverwendbar innerhalb der Grenzen der aktuellen Anwendung zu machen. Refaktorieren Code, um Überschneidungen im aktuellen Umfang der Arbeiten zu vermeiden. Auf diese Weise machen Sie es einfacher, mit zu einem späteren Zeitpunkt zu arbeiten. Seien Sie nicht so viel Code für die Wiederverwendung als für den Wandel, Veränderung ist viel häufiger.

Einer der Gründe, warum SOA versagt hat, oder hat nicht noch angehoben, ist, dass es schwierig ist, einen Dienst wieder zu verwenden: Entweder es ist zu spezifisch und kann nicht anderweitig verwendet werden, oder zu allgemein (und in der Regel sehr Komplex) und erfüllt nicht die Bedürfnisse der verschiedenen Kunden.

Dies ist nicht „die Wiederverwendung von Code“, es ist „die Wiederverwendung von Services“, aber es gibt einige gemeinsame Konzepte.

Meine 2c ist, dass die Ethik der Code-Wiederverwendung muss ein Unternehmen, was nicht nur ein Projekt Sache. Dies bedeutet, dass, wenn Sie ein neues Projekt zu starten, das primäre Anliegen ist „was andere Projekte kann ich stehlen Code aus diesem Job auch zu erledigen und so schnell wie möglich?“.

Dies wird Konflikt mit der Frage „Was ist das beste - oder trendigsten - Sprache / Werkzeug für den Job“

Unternehmen, die dieser Ansatz mit einem Pool von Ingenieuren am Ende haben, die leicht von Projekt wechseln zu projizieren, weil die Sprache, Rahmen und interne Codebasis aller konsistent sind.

Die Kehrseite ist, dass auf eine „neue“ Sprache oder Rahmenschalt ist viel mehr politisch schwierig, auch wenn es irgendwann passieren muß.

Ein weiterer Vorteil mit Wiederverwendung ist, dass Sie den Überblick, wo die Dinge passieren in der oode Basis easiliy können. wenn Sie eine Million Zeilen Code bekommen kann es Stunden dauern, alle Orte zu finden, wo die Anwendung in gewisser Weise verhält. Mit einer modernen IDE können Sie einfach auf „Referenzen finden“ und Sie werden feststellen, innerhalb von ein paar Sekunden, alle Orte, an denen Sie Ihre Komponente / Methode verwendet wird. Dies kann nützlich sein, wenn Sie neue Funktionen nutzen möchten hinzufügen, Fehler beheben oder einfach nur lernen wollen, wie das System funktioniert.

Wir haben ein paar, aber was wir viel mehr sind Projekte mit der Funktionalität haben Sie wollen, aber auf ihre eigene Weise getan, so oft mehr als du nicht Features von alten Projekten am Ende kannibalisieren und sie in Ihrem neuen Neuimplementierung. Ich würde argumentieren, dass dies immer noch zählt -. Sie sind immer noch den Vorteil des Erhaltens bevor der Code geschrieben zu haben, und Sie immer noch die Zeit sparen

Außerdem habe ich festgestellt, dass es erst das zweite Mal, dass Sie versuchen, die Funktionalität verwenden, die es offensichtlich wird, in dem die Wiederverwertbarkeit ist, und wenn Sie versuchen, und verallgemeinern etwas spekulativ fast Sie immer etwas falsch gemacht und es ändern müssen beim nächsten Mal.

Wie andere Plakate haben gesagt, wenn Sie vorhaben, den Code dann wiederverwenden zu kopieren, werden Sie froh, Sie tat dies, wenn Sie Debuggen kopierten Code starten.

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