Wie man Code modularisiert?
Ich habe einige Java-Programme, jetzt möchte ich herausfinden, ob modular oder nicht, wenn es modular aufgebaut ist dann, bis zu welchem Umfang, da ist die Modularität nie binäre Begriff, D. H. 0 oder 1.
Wie kann ich entscheiden, dass ein bestimmter code ist modular aufgebaut und kann bis zu so viel Umfang. Ich möchte wissen, wie man code viel mehr modular?
InformationsquelleAutor der Frage | 2009-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Maßstäbe für Modularität:
Weitere Ideen check this out und dieses auf software-Qualität
Als für Ihr Interesse an wodurch der code modularer zunächst sollten Sie sich Fragen die oben genannten Fragen, um spezifische Antworten für Sie und dann haben Sie einen Blick auf diese
Den grundlegende Philosophie ist, zu brechen, Ihre Bewerbung in so kleinem code-Fragmente wie möglich angeordnet, fein säuberlich in einer Vielzahl von leicht verständlichen und zugänglichen Verzeichnis-layout.
Jede Methode in Ihrer Anwendung muss nicht mehr tun als das minimum quanta von der Verarbeitung benötigt. Die Kombination dieser Methoden in mehr und mehr makro-Ebene Methoden führen müssen, der Sie zurück zu Ihrem Anwendung
InformationsquelleAutor der Antwort OrangeRind
Wichtige Punkte sind
Ein gutes Beispiel einer solchen Modul-system ist standard-Auto-Teile wie Scheibenbremsen und Auto-Stereoanlage.
Sie wollen nicht bauen Auto stereo, von Grund auf, wenn Sie bauen Autos. Sie lieber kaufen Sie es und stecken Sie es in. Sie wollen auch nicht das Bremssystem beeinflussen das Auto, stereo — oder noch schlimmer Auto-stereo-Auswirkungen auf die Bremsanlage.
Ihre Frage zu beantworten, "Wie kann ich entscheiden, dass ein bestimmter code ist modular bis zu diesem viel aufzuarbeiten", können wir Fragen, um zu testen die Modularität. Können Sie leicht ersetzen Sie Ihre Module mit etwas anderem, ohne Auswirkungen auf andere Teile der Anwendung?
XML-Parser kann ein Beispiel. Sobald Sie die DOM-Schnittstelle, die Sie wirklich don ' T Pflege, die Umsetzung der XML-parser verwendet wird, unterhalb (z.B. Apache Xerces oder JAXP).
In Java, eine weitere Frage kann sein: Sind alle Funktionen zugänglich über
interface
s? Schnittstelle ziemlich viel, kümmert sich um die niedrige Kopplung.Auch, können Sie beschreiben, jedes Modul in Ihrem system mit einem einzigen Satz? Zum Beispiel, ein Auto-stereo-Wiedergabe von Musik und radio. Disk-Bremsen verzögern das Fahrzeug sicher.
(Hier ist, was ich schrieb Was ist component-driven development?)
Laut Wikipedia, Komponenten-Basierte Entwicklung ist ein alias für Component-based software engineering (CBSE).
Dies ist etwas vage, also lasst uns auf weitere details.
So, nach dieser definition, eine Komponente kann alles sein, solange es nicht eine Sache wirklich gut und nur eine Sache.
Also das klingt mehr und mehr wie das, was wir denken, gute API oder SOA Aussehen sollte.
Den zur Verfügung gestellt Schnittstellen sind vertreten durch ein lollipop und erforderlich Schnittstellen sind vertreten durch eine offene socket-symbol angebracht, um den äußeren Rand der Komponente in UML.
alt-text http://upload.wikimedia.org/wikipedia/commons/e/e1/Component-based-Software-Engineering-example2.gif
Ersetzbarkeit und Wiederverwendbarkeit ist es, was eine Komponente eine Komponente.
Also, was ist der Unterschied zwischen dieser und Objekt-Orientierte Programmierung?
InformationsquelleAutor der Antwort Eugene Yokota
Beantworten Ihre spezifische Frage der wie man der code modularer, ein paar Ansätze sind:
Einer der beste Werkzeug für die Modularisierung ist spotting-code wieder zu verwenden. Wenn Sie feststellen, dass Ihr code macht exakt das gleiche (oder sehr ähnliche) Sache mehr als einmal im Ort, es ist ein guter Kandidat für die Modularisierung entfernt.
Bestimmen, welche Teile der Logik gemacht werden können, unabhängig, in dem Sinne, dass andere Logik verwenden würden, ohne zu wissen, wie Sie gebaut sind. Dies ist etwas ähnlich, was Sie in OO-design, obwohl-Modul/- Komponente muss nicht notwendigerweise entsprechen einer modellierten Objekt wie in OO.
InformationsquelleAutor der Antwort DVK
Hej,
Sehen, "Wie einkapseln von software (Teil 1)," hier:
http://www.edmundkirwan.com/encap/overview/paper7.html
Grüße,
Ed.
InformationsquelleAutor der Antwort
Da dies wurde getaggt mit 'osgi', ich kann werfen in einem OSGi-bezogenen Perspektive.
Die kurze Antwort ist, dass es möglich ist, um zu gehen von völlig spaghetti-code zu modulare in kleinen Schritten; es muss nicht zu einem großen Knall. Zum Beispiel, auch spaghetti-code hängt davon ab, irgendeine Art von Bolognese-logging-Bibliothek, also in gewissem Sinne, es ist bereits modular, nur mit Einem Sehr Großen Metball (sorry, Modul).
Den trick zu brechen, die große Frikadelle in ein kleineres Stück, und dann eine etwas weniger große Frikadelle und dann recurse. Es muss nicht alles gemacht werden in eins gehen entweder; einfach chip-off ein bisschen mehr, jedes mal, bis es nichts mehr zu entfernen.
Als für OSGi, es ist immer noch möglich, ein uber-jar in ein Bündel. In der Tat, Sie können dies tun, ohne änderung der bits, entweder durch ändern der Manifest.MF an Ort und Stelle, oder durch das einwickeln, in ein anderes Gefäß und geben Sie den Bundle-ClassPath: metaball.jar in der manifest.
Gelingt das nicht, müssen tools wie BND helfen können, generieren Sie die richtigen Daten, die Sie brauchen würde, und dann kann es gelöscht werden, die in einer OSGi-runtime-leicht genug. Aber hüten Sie sich vor allzu gekoppelten code, und Sachen, die düngt, um mit classloadern, - die Reise, die Sie bis.
InformationsquelleAutor der Antwort AlBlue
Vorausgesetzt, ich verstehe deine Frage, dass du wissen willst, was es ist, dass macht-code-modulare, da der code-Module müssen natürlich gewisse Abhängigkeit von einander, alle am arbeiten. Dies ist meine Antwort:
Wenn Sie brechen Ihr system in Module, und Sie können testen dieser Module in isolation, ist das ein gutes Indiz dafür, dass eine system ist modular aufgebaut.
InformationsquelleAutor der Antwort Christian
Wie Sie sagen Modularität ist nicht eine binäre Sache, also es hängt davon ab, Ihre relative definition.
Ich würde sagen: Können Sie eine bestimmte Methode in einem Programm, wo Sie brauchen, um die Funktion ausführen? Ist es, die "black box", wo man es nicht brauchen, zu wissen, was es tut unter der Haube? Wenn die Antwort Nein ist, D. H. die Methode würde nur dann funktionieren, in diesem Programm, dann ist es nicht wirklich modular.
InformationsquelleAutor der Antwort Smalltown2k
Modularität ist relativ, immer ist die Entwicklung des Codes. Aber ich denke, der Allgemeine Konsens ist, dass der modulare code ist code, der hat die Teile können leicht ausgetauscht werden ohne änderung die meisten der original-code.
IMHO, Wenn du 3 Module A, B und C, und Sie möchten, zu ändern oder zu ersetzen, Modul C vollständig, wenn es eine EINFACHE Aufgabe zu tun, dann haben Sie modularen code.
InformationsquelleAutor der Antwort Peter D
Können Sie eine code-Analyse-tool wie GAP zur analyse der Abhängigkeiten zwischen Typen und Pakete. Sie werden Ihnen helfen, finden und entfernen der zyklischen Abhängigkeiten, die oft ein problem, wenn Sie versuchen zu entwickeln modularer code.
Wenn es keine zyklische Abhängigkeiten, können Sie beginnen, trennen Sie Ihren code in einzelne Gläser.
Im Allgemeinen ist es gute Praxis, um code-Schnittstellen, wenn Sie können, dies in der Regel bedeutet, dass Ihr code kann leicht umgestaltet werden und/oder in verschiedenen Kontexten verwendet werden.
Dependency injection-frameworks wie Frühling kann auch helfen, die Modularität des Designs. Als Arten injiziert werden mit Ihren Abhängigkeiten durch äußere Konfiguration, die Sie nicht brauchen eine direkte Abhängigkeit auf eine Umsetzung.
InformationsquelleAutor der Antwort Rich Seller
Den Paket-by-Funktion Idee hilft, um den code mehr modular.
Viele Beispiele gesehen, die auf dem web teilen-Anwendungen zuerst in Schichten, nicht features
Scheint es jedoch besser, zu teilen Anwendungen mit top-level-Paketen, die im Einklang mit Merkmale, Ebenen.
Hier ist ein Beispiel einer web-app, verwendet die Paket-by-Funktion. Hinweis: die Namen der top-level-Pakete, die Lesen sich wie eine Liste der Funktionen in der Anwendung. Beachten Sie auch, wie jedes Paket enthält alle Artikel mit Bezug auf eine Funktion, - die Gegenstände nicht verteilt alle über den Ort; die meisten der Zeit, Sie sind alle in einem einzigen Paket/Verzeichnis.
Normalerweise löschen einer Funktion in so einer app umgesetzt werden können in einem einzigen Vorgang löschen von einem Verzeichnis.
InformationsquelleAutor der Antwort John O