Ich arbeite an Java-Unternehmensprojekten, die keinen einzigen Einstiegspunkt haben, von dem aus ich den Ausführungsfluss verfolgen kann. Einige der Projekte haben Hunderte von Klassen, und wenn ich gebeten werde, einem Projekt eine Funktion hinzuzufügen, bin ich oft ratlos, wo ich anfangen soll, nach Code zu suchen.
Was ist der beste Weg, um in solche Projekte einzutauchen, damit ich die Funktion schnell implementieren kann, ohne Zeit zu verschwenden.
design
entry-point
rdasxy
quelle
quelle
Antworten:
Verfügt das Projekt über eine Reihe gut gewarteter Komponententests? Die Unit-Tests sind programmatische Dokumentationen für die Funktionsweise des Codes.
Darüber hinaus müssen Sie genug über die Architektur der Anwendung lernen, um die Stellen zu identifizieren, an denen Sie Code für Ihre neuen Funktionen einfügen müssen, und den Rest mehr oder weniger ignorieren. Sie müssen dazu nicht die gesamte Codebasis kennen. Wenn die Projekte gut strukturiert sind, ist die Funktionalität bereits ausreichend gekapselt und entkoppelt, sodass Sie sich auf die relevanten Teile konzentrieren können. Wenn Sie Glück haben, folgen die Projekte bereits einer bekannten Architektur, die Ihnen als Karte dient.
Code hat immer einen oder mehrere Einstiegspunkte. Bei MVC-Projekten ist der Einstiegspunkt eine Controller-Methode, die auf einer URL basiert. Die Methode greift mit ziemlicher Sicherheit auf ein Datenrepository zu und gibt eine Ansicht zurück. Beginnen Sie dort.
quelle
Beginnen Sie mit der mittleren Ebene (Geschäftslogikschicht).
Dies ist einer der Orte, an denen das Steuerelement für Benutzeraktionen oder Triggerereignisse verwendet wird, wenn es sich um eine nicht auf der Benutzeroberfläche basierende Anwendung handelt. Wenn Sie sich im Debug-Modus befinden, können Sie ihn nach oben und unten verfolgen (höchstwahrscheinlich Datenzugriffsebene).
Es wird einige Zeit dauern, aber dies ist der effiziente Weg, um in undokumentierte Projekte zu springen.
Wenn das Projekt ein Framework verwendet (struts-config.xml, ejb config xmls, spring config xmls), verfügt es über definierte Schnittstellen, und Sie können auch von dort aus beginnen.
quelle
Es gibt immer einen Einstiegspunkt. Für Java-Unternehmensanwendungen: Servlets, Filter und Kontext-Listener befinden sich ganz oben. Sie führen normalerweise zu Anwendungs-Bootstrapping, z. B. Spring Context Loader, das dann zu Controllern, dann zu Entitäten und Ansichten führt. Es ist eigentlich ziemlich einfach, besonders wenn ein Rahmen wie Feder, Wandteppich oder Wicket verwendet wird. Sobald Sie wissen, wie das Framework eine Anforderung verarbeitet, sollten Sie in der Lage sein, die benötigten Erweiterungspunkte zu identifizieren.
quelle
Ich würde mit einer Klassenhierarchie beginnen. Wenn Sie ein großartiges Tool haben, finden Sie ein Tool, mit dem Sie Ihren Code zurückentwickeln und eines für Sie erstellen können. Von hier aus können Sie sehen, wie die Dinge zusammenhängen können. Sobald Sie sehen können, wie die Dinge zusammenhängen, können Sie zumindest Bereiche anvisieren, anstatt eine große Anzahl von Klassen zu haben. Sie können auf einen Bereich abzielen, in dem Sie sehen können, wie sie miteinander verknüpft sind (ist diese Klasse eine Zuordnung zu dieser, ist diese Klassengruppe ein Entwurfsmuster usw.). Versuchen Sie, etwas Ordnung und Struktur um das, was Sie betrachten, hinzuzufügen, und teilen Sie dann jeden Abschnitt auf.
BEARBEITEN:
Hier sind einige Beiträge aus dem Stapelüberlauf, in denen die Tools beschrieben sind, die Sie in Eclipse (oder als eigenständige Anwendungen) zum Reverse Engineering und Generieren eines Modells verwenden können:
"Wie isst du einen Elefanten?" "Ein Bissen nach dem anderen".
quelle
Es ist fast unmöglich, Ihr Java-Projekt zu erweitern, wenn Sie nicht die Einstiegspunkte und eine klare Dokumentation darüber erhalten, was und warum getan wurde.
Zu Ihrer Information: Wenn wir unseren Kunden ein Projekt liefern, verbinden wir jetzt systematisch ein UML-Modell sowie ein Java-Dokument und eine gedruckte Dokumentation. Wir erstellen Hunderte von Ansichten aus dem Modell, die als Klassendiagramme angezeigt werden. Wir fügen viele Kommentare hinzu und erläutern die statische Architektur sowie den Ablauf von Geschäftsregeln und -methoden. Wenn unsere Kunden seinen Code übernehmen und an ein anderes Unternehmen weitergeben möchten, können sie die vorhandene Software nicht nur auf Bereitstellungsebene, sondern auch auf Architekturebene problemlos ändern. Leistungsstarke, einfache und brillante Verwendung dynamischer UML-Ansichten aus einem einzigen Modell.
Trotzdem kenne ich nur sehr wenige Integratoren, die daran interessiert sind, all diese Informationen bereitzustellen, denn wenn der Kunde einmal gefangen ist, ist es besser, ihn nicht gehen zu lassen. Durch die Bereitstellung eines vollständigen Modells und einer dynamischen UML-Navigation können Kunden unabhängig sein, was sich nicht positiv auf den Geschäftsumsatz auswirkt. Ich verstehe immer noch nicht, warum Großbanken oder Telekommunikationsunternehmen so naiv sind, von Integratoren gefangen zu werden, und fragen bei der Projektabwicklung nicht nach dem vollständigen Modell? Der Java-Code oder eine gedruckte Dokumentation reichen nicht aus. Die gedruckte Dokumentation ist normalerweise ein automatischer Prozess. Es hat keinen wirklichen Wert, Informationen aus dem Code zu extrahieren, um sie zu drucken oder ein PDF bereitzustellen.
quelle
Es gibt IMMER Einstiegspunkte, man muss sie nur finden. Wenn es sich um eine zeitgesteuerte Stapelanwendung handelt, sind irgendwo Aufgaben konfiguriert. Wenn es sich um eine Webanwendung handelt (mit Spring), gibt es Zuordnungen und Controller. Wenn es sich um eine Webdienstanwendung handelt, gibt es Dienstendpunkte. Wenn es sich um eine Swing-Anwendung handelt, gibt es Event-Handler oder ähnliches. Und wenn es sich um eine große, haarige Befehlszeilenanwendung handelt, gibt es eine
main()
Methode.In Bezug auf "schnell eintauchen" - nun, wie lange es dauert, um die Einstiegspunkte zu finden, ist wirklich individuell. Wenn das System nach festgelegten Mustern geschrieben ist und Sie mit den Frameworks und den zugrunde liegenden Geschäftsregeln und -prozessen vertraut sind, sollten Sie in der Lage sein, diese sehr schnell herauszufinden. Wenn nicht, kann es länger dauern. Aber es gibt keinen universellen "Trick". Sie sammeln Erfahrung, lernen Muster zu erkennen und zu verstehen, wie die Frameworks aufgebaut und organisiert sind, und Sie werden besser.
quelle
In Bezug auf den Umgang mit Legacy-Code:
In Bezug auf den Ausführungsfluss:
In Bezug auf den Einstiegspunkt:
quelle