Frage

Komponentengetriebene Entwicklung Der Begriff wird immer häufiger verwendet, insbesondereim Zusammenhang mit Inversion of Control.

  1. Was ist es?
  2. Welche Probleme löst es?
  3. Wann ist es angemessen und wann nicht?
War es hilfreich?

Lösung

  

Was ist das?

Ich denke, die Definition in Ihrer Antwort auf diese Frage deckt gut. Obwohl, frage ich mich, warum umfasst die Definition, dass eine Komponente ihre Abhängigkeiten explizit definieren muss. Ein kanonisches Beispiel einer Komponente ist ein ActiveX-Steuerelement - tun müssen sie ihre Abhängigkeiten explizit definieren

  

Welche Probleme hat es zu lösen?

Management von Komplexität. Es soll die Adresse, indem Sie immer nur über die Umsetzung der Komponente zu denken. Man sollte nur müssen Komponenten an Autor, sollte man nicht müssen darüber nachdenken, wie sie kombinieren oder verwalten. Das wird von einigem Rahmen oder Infrastruktur außerhalb der Komponente durchgeführt, und unwichtig zu der Komponente Autor.

  

Wann ist es sinnvoll und wann nicht?

Nicht unbedingt angemessen in einer trival oder Wegwerf-Anwendung. Der schlechte Geruch in einer Komponentenarchitektur, ist, wenn Sie Zeit die Ausgaben für das Denken oder Arbeiten an der Infrastruktur-Komponenten zu verwalten und zu kombinieren, anstatt die Komponenten selbst.

Andere Tipps

Ich bin nicht sicher, ob es sich um eine „weit verbreitet“ Terminologie ist, aber in der VCS (Version Control System), ich kenne zwei Möglichkeiten, um eine Reihe von Dateien zu verwalten benötigt ein Programm zu erstellen:

  • systembasierten Ansatz , wo die alle Satz ein gemeinsames Leben hat Zyklus und muss als alle
  • markiert werden
  • komponentenbasierten Ansatz, bei dem einzelne Satz von Dateien ihren eigenen Lebenszyklus hat, und wo eine Meta-Label Referenzen all Etiketten der Komponenten, die alle Systeme durch die Zusammensetzung und Abhängigkeiten zwischen diesen Komponenten zu bezeichnen.

Die applicative Architektur verwendet wird, um diese Komponenten zu identifizieren:

  • funktionelle Domäne und Anwendungen
  • Bibliotheken von Drittanbietern
  • Rahmenbedingungen

Das ist, wo IoC kommt, da es an der Basis eines Rahmens ist. Das Problem löst es Ihnen ermöglichen, um besser auf den Teil Ihrer Anwendung zu identifizieren:
Angenommen, Sie entwerfen ein PLR (Gewinn und Verlust) Anwendung verantwortlich, die Verstärkung und Verluste zu berechnen (Position) eines Händlers.
Sie würden schnell erkennen, dass es nicht eine einzige Anwendung, sondern eine Zusammensetzung aus mehreren:

  • GUI
  • Launcher
  • Dispatcher (die Berechnung auf mehrere Server schicken, weil man nicht genügend Speicher zu berechnen, alle haben würde!)
  • und so weiter

Sie können dann eine Berechnung Rahmen (IOC) identifizieren, die es Ihnen ermöglichen würde Ihre verschiedenen Module Plug-in, das dann zum richtigen Zeitpunkt von Ihrem Rahmen genannt werden.

Sie können auch rein technischen Rahmenbedingungen identifizieren (KPI, Protokolle, Ausnahme Leitungen), die dann von einem der verwendet werden kann, Ihre andere funktionelle Komponenten.

Im Begriff des Projektmanagements, das können Sie auch jeden Teil unabhängig entwickeln, während eine globale Koordination durch die VCS zu gewährleisten.

Komponentenbasierte Entwicklung ist nichts wirklich Neues.Ich kenne die komponentengesteuerte Entwicklung nicht, aber ich gehe davon aus, dass es sich um CBD handelt.So ist Unix konzipiert, eine Reihe austauschbarer kleiner Programme, von denen jedes eine Sache sehr gut macht.Im Desktop-Bereich war die VCL von Delphi wie keine andere erfolgreich bei der Verwendung von Komponenten mit umfangreichen wiederverwendbaren Komponenten und auf dem Markt von Drittanbietern.Wir erleben jetzt die Wiederbelebung des CBD, da einige Technologien ausgereift sind.Beispielsweise entwickeln sich einfache Web-Apps zu SOA und RESTful WS.Alles, worüber die Java-Leute gesprochen haben, ist Modularität und IoC.

Die Antwort, nach der Sie suchen, finden Sie wahrscheinlich in Warum und was ist mit der Umkehrung der Kontrolle? von Ke Jin.

Außerdem tendiert das imperative Natürliche dieser klassischen OO-Programmiersprachen dazu, den Wald (Architekturen/Strukturen auf hoher Ebene) für die Bäume (Logic Control Procedural Code) zu verpassen.Entwicklungs- und Wartungsingenieure, die eine vorhandene Anwendung übernehmen, müssen sich auf die Dokumente/Architektur -Dokumente/Architektur -Dokumente und Code -Kommentare/-muster auf niedriger Ebene verlassen.

Das CBD-Paradigma (Komponentenbasierte Entwicklungsbasis) befasst sich mit den beiden oben genannten Problemen, indem es die Sanitärlogik in Frameworks verwandelt, die Komponenten manipulieren und Anwendungen auf der Grundlage von Benutzern/Entwicklern einrichten, die deklarative Beschreibungen zur Verfügung gestellt wurden.Entgegen der gemeinsamen Verwirrung sollen solche deklarativen Beschreibungen keine Anwendungs ​​-Setup -Skripte sein.Ihre grundlegende Absicht ist es vielmehr, explizit Anwendungsarchitekturen/-strukturen auszudrücken, ohne ihre imperativen Sanitärverfahren vorzuschreiben (nämlich das, was anstelle des Wie).Das Ziel des CBD-Paradigmas ist es, effektive und flexible Anwendungszusammensetzungen dieser Frameworks zu unterstützen und sich die Anwendungsentwickler auf Geschäftslogik- und Domänenprobleme zu konzentrieren, ohne dass die Komplexität des Sanitärs auf niedrigem Niveau in Bezug auf die Klempnersteine ​​in der Lage ist.

CBD -Frameworks, die die deklarativen Anwendungsbeschreibungen und die IOC -Technik kombinieren, werden als IOC -Frameworks bezeichnet.Im Gegensatz zu ihren Vorgängern sind IOC -Frameworks nicht-invasiv und nutzen Sie die Abhängigkeits-/Konfigurationsinjektions-/Einstellungsszenario.

Laut Wikipedia ist Component-Based Development ein Alias ​​für Komponentenbasiertes Software-Engineering (CBSE).

It] ist ein Zweig des Software -Engineering, der die Priorität ist Trennung von Bedenken In Bezug auf die weitreichende Funktionalität, die während eines bestimmten Softwaresystems verfügbar ist.

Das ist etwas vage, also schauen wir uns weitere Details an.

Eine einzelne Komponente ist ein Softwarepaket oder ein Modul, das eine Reihe von verwandten Funktionen (oder Daten) zusammenfasst.

Alle Systemprozesse werden in separate Komponenten eingesetzt, sodass alle Daten und Funktionen in jeder Komponente semantisch miteinander verbunden sind (genau wie mit dem Inhalt der Klassen).Aufgrund dieses Prinzips wird oft gesagt, dass Komponenten sind modular Und zusammenhängend.

Nach dieser Definition kann eine Komponente also alles sein, solange sie eine Sache wirklich gut macht und zwar nur eine Sache.

In Bezug auf die systemweite Koordination kommunizieren Komponenten übereinander über einander Schnittstellen....] Dieses Prinzip führt zu Komponenten, die als bezeichnet werden gekapselt.

Das klingt also immer mehr so, wie wir uns eine gute API oder SOA vorstellen.

Der bereitgestellt Schnittstellen werden durch einen Lollipop und dargestellt erforderlich Schnittstellen werden in UML durch ein offenes Socket-Symbol dargestellt, das am äußeren Rand der Komponente angebracht ist.

alt text
(Quelle: wikimedia.org)

Ein weiteres wichtiges Attribut von Komponenten ist, dass sie es sind ersetzbar, damit eine Komponente durch eine andere (zur Entwurfszeit oder zur Laufzeit) ersetzt werden kann, wenn die Anforderungen der Anfangskomponente (ausgedrückt über die Schnittstellen) von der Nachfolgekomponente erfüllt werden.

Wiederverwendbarkeit ist ein wichtiges Merkmal einer hochwertigen Softwarekomponente.Eine Softwarekomponente sollte so gestaltet und implementiert werden, damit sie in vielen verschiedenen Programmen wiederverwendet werden kann.

Ersetzbarkeit und Wiederverwendbarkeit machen eine Komponente zu einer Komponente.Was ist also der Unterschied zwischen dieser und der objektorientierten Programmierung?

Die Idee in der objektorientierten Programmierung (OOP) ist, dass Software nach einem mentalen Modell der von ihnen dargestellten tatsächlichen oder imaginären Objekte geschrieben werden sollte.[...]

Komponentenbasierte Software-Engineering stellt im Gegensatz dazu keine solchen Annahmen aus und gibt stattdessen an, dass Software entwickelt werden sollte, indem vorgefertigte Komponenten zusammengefasst werden, ähnlich wie im Bereich Elektronik oder Mechanik.

Hier ist meine Definition nach einiger Forschung.

Component-Driven Development ist ein Ansatz in der Softwareentwicklung, in dem Code in wiederverwendbare und prüfbare Komponenten fragmentiert ist, die miteinander kombiniert sind, für die Bereitstellung von Business-Funktionalität Anwendungsgrundlage zu bilden. Die Kombination und das Management von Komponenten ist in der Regel delegiert href="http://abdullin.com/wiki/inversion-of-control-ioc.html" rel="noreferrer"> Inversion of Control Container zum

Eine Komponente selbst ist eine Klasse, die einen Service-Vertrag implementiert und definiert explizit die Abhängigkeiten, die es, um diesen Vertrag zu erfüllen hat. Die tatsächliche Umsetzung wird von allen anderen außerhalb der Komponente versteckt.

Weiterführende Links:

Ich sehe Component Based Software Engineering als Ansatz Software-Systeme durch den Einsatz von steckbaren Komponenten zu entwickeln; mit einer Komponente „ eine Einheit der Zusammensetzung mit vertraglich festgelegten Schnittstellen und expliziten Kontextabhängigkeiten nur “ zu sein, die „ unabhängig voneinander eingesetzt werden kann und unterliegen Fremd Zusammensetzung .“ (Clemens Szyperski " Component Software: über objektorientierte Programmierung ")

CBSE erleichtert die Wiederverwendung von Code und schnelle Montage von flexiblen / anpassungsfähige Software-Systeme.

Es gibt eine erhebliche Forschung, die seit Jahren zu diesem Thema konzentriert wurde. Die Leitveranstaltung ( ACM SIGSOFT Symposium über Component Based Software Engineering ) ist im 14. Jahr jetzt, und es gibt schon einige neue Trends entstehen.

Auch, wenn Sie ein gutes Beispiel für wiederverwendbare, steckbar und erweiterbare Komponenten wollen, stark im Einsatz von der Industrie heute, werfen Sie einen Blick auf MS Enterprise Library .

Wenn Sie in der Kombination von Komponenten (oder andere wiederverwendbare Elemente) interessiert sind, in Anwendungen sollten Sie auch einen Blick auf die Software-Produktlinien Methodik.

In einer Software-Produktlinie die Abhängigkeiten zwischen den Komponenten (oder untergeordneten Codeelementen) außerhalb dieser Komponenten explizit verwaltet. Dies wird in der Regel ein Feature-Modell gemacht mit , die Regeln wie

enthält
  • müssen diese beiden Komponenten nicht zusammen verwendet werden (gegenseitige Exklusivität)
  • Wenn diese Komponente verwendet wird, dann ist diese andere Komponente verwendet werden oder (Interdependenz)
  • Jede Kombination von einigen bestimmten Satz von Komponenten verwendet werden können (Optionalität)

Andere komplexere Regeln sind möglich, je nach Komplexität der Abhängigkeiten Sie modellieren möchten.

Ein weiterer Ansatz, manchmal statt Feature-Modellierung verwendet wird, ist ein Code-Generator zu verwenden, um die verschiedenen Komponenten zu konfigurieren, die in die fertige Anwendung zusammengebaut werden sollen. Es ist auch möglich, Feature-Modellierung mit der Codegenerierung zu verbinden.

Neben der Code-Generierung, einige andere Begriffe, die Sie für als domänenspezifische Modellierungs suchen könnte, modellgetriebene Software-Entwicklung, Software-Familie.

Sie werden nie verstehen, was wirklich Component-Driven Development ist, bis Sie versuchen, Unity 3D zu verwenden. Es ist nicht ActiveX oder alles, was Sie jemals zuvor gesehen, was Sie gesehen haben, bevor eine weitere Komponente Bedeutung hat.

Component-Driven Development, etwa jeder spricht in letzter Zeit bedeutet, Sie haben 2 Dinge:

  1. Object - die wie ein Objekt in OOP-Programmierung oder Objekt der realen Welt ist
  2. .
  3. Object Component -., Die wie ein Teil der Objekt Funktionalität oder einer seiner Fähigkeiten ist

So: Komponente - ist kein Objekt. Es ist -. Die Funktionalität eines Objekts

Also, in Standard OOP-Programmierung, wenn Sie Basisobjekt mit neuer Funktionalität müssen erweitern, müssen Sie neues abgeleitete Objekt durch Vererben Basisobjekt machen.

In Component-Driven Development, wenn Sie erweiterte Objekt benötigen, erstellen Sie nur leeres Objekt und füllt es mit verschiedenen Komponenten, ohne Vererbung. In Component-Driven Entwicklung gibt es keine Klassen gibt es Prefabs statt -., Die vordefinierte Objekte mit vordefinierten Komponenten ist, mit Kindern Objects

Wie ich sagte, werden Sie nie, bis Sie verstehen versuchen. Mit Komponenten-drived Entwicklung Sie müssen nicht immer die Programmierung verwenden, können Sie grafischen Editoren verwenden stattdessen und auch befreit es Sie von Vererbung Hell of typischen OOP. Komponenten selbst mit üblichen Programmierung programmiert, aber höhere Level-System, einschließlich der Objekte, meist nur verwenden müssen und Komponenten in Editor zu kombinieren und individuelle Objekte Verhalten erhalten.

So: Component-Driven Development gibt Ihnen:

  1. Große Macht Ihres Programms Logik zu erstellen, indem Sie einfach mit einem Editor, ohne Programmierung.
  2. Befreit Ihren Geist von OOP Vererbung Hölle. Macht die Entwicklung einfacher und schneller.
  3. Macht Ihr Programm hochgradig anpassbar und skalierbar, ohne auch nur zu berühren Code. Weniger Fehler und Bugs.
  4. Einfachere Ihr Programm den Code erhalten, indem nur bestimmte Komponenten Umprogrammierung, ohne viel zu bewirken Ruhesystem.
  5. etc ...

Ich möchte auch hinzufügen, dass Component-based (angetrieben) Programmierung ist nicht Ersatz für OOP-Programmierung, ist es oben auf OOP oder üblichen Programmierung. Übliche Programmierung noch in CBP für geringe Komponente der Umsetzung. Ich denke, dieser Artikel auch gut und kurze Erklärung von CBP haben: http: //acmantwerp.acm.org/wp-content/uploads/2010/10/componentbasedprogramming.pdf

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