Ist Fassade eine Klasse, die viele andere Klassen enthält?
Was macht es zu einem Designmuster? Für mich ist es wie eine normale Klasse.
Können Sie mir dieses Fassadenmuster erklären ?
design-patterns
facade
Kevin
quelle
quelle
Antworten:
Ein Entwurfsmuster ist eine übliche Methode zur Lösung eines wiederkehrenden Problems. Klassen in allen Entwurfsmustern sind nur normale Klassen. Wichtig ist, wie sie strukturiert sind und wie sie zusammenarbeiten, um ein bestimmtes Problem bestmöglich zu lösen.
Das Fassadenmuster vereinfacht die Schnittstelle zu einem komplexen System. weil es normalerweise aus allen Klassen besteht, aus denen die Subsysteme des komplexen Systems bestehen.
Eine Fassade schützt den Benutzer vor den komplexen Details des Systems und stellt ihm eine
simplified view
davon zur Verfügungeasy to use
. Es ist auchdecouples
der Code, der das System aus den Details der Subsysteme verwendet, was es einfacher macht, das System später zu ändern.http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
Beim Erlernen von Entwurfsmustern ist es außerdem wichtig, zu erkennen, welches Muster zu Ihrem Problem passt, und es dann entsprechend zu verwenden. Es ist sehr häufig, ein Muster zu missbrauchen oder zu versuchen, es an ein Problem anzupassen, nur weil Sie es kennen. Seien Sie sich dieser Fallstricke bewusst, während Sie anhand von Entwurfsmustern lernen.
quelle
Wikipedia hat ein großartiges Beispiel für ein Fassadenmuster.
quelle
Wie in der vorherigen Antwort erläutert, bietet es eine einfache Schnittstelle zum konsumierenden Client. Zum Beispiel: "ESPN beobachten" ist die beabsichtigte Funktion. Es umfasst jedoch mehrere Schritte wie:
Die Fassade vereinfacht dies jedoch und bietet dem Kunden lediglich die Funktion "ESPN beobachten".
quelle
Facade verbirgt die Komplexität des Systems und bietet eine Schnittstelle zum Client, von der aus der Client auf das System zugreifen kann.
quelle
OrderFacade
? In Ihrem Beispiel zwischenPayment
undInventory
?Eine kurze und einfache Erklärung:
Versuchen Sie, das Szenario mit und ohne Fassade zu verstehen:
Wenn Sie das Geld von Konto 1 auf Konto 2 überweisen möchten, müssen Sie die beiden aufzurufenden Subsysteme von Konto 1 abheben und auf Konto 2 einzahlen.
quelle
Eine Fassade sollte nicht als eine Klasse beschrieben werden, die viele andere Klassen enthält. Es ist in der Tat eine Schnittstelle zu diesen Klassen und sollte die Verwendung der Klassen erleichtern, da sonst die Fassadenklasse unbrauchbar ist.
quelle
In Bezug auf Ihre Fragen:
Ja. Es ist ein Wrapper für viele Subsysteme in der Anwendung.
Auch alle Entwurfsmuster sind normale Klassen. @ Unmesh Kondolikar hat diese Frage zu Recht beantwortet.
Laut GoF wird das Fassadenmuster wie folgt definiert:
Stellen Sie eine einheitliche Schnittstelle für eine Reihe von Schnittstellen in einem Subsystem bereit. Facade Pattern definiert eine übergeordnete Schnittstelle, die die Verwendung des Subsystems vereinfacht
Das Fassadenmuster wird normalerweise verwendet, wenn:
Nehmen wir ein echtes Wortbeispiel für die Cleartrip- Website.
Diese Website bietet Buchungsmöglichkeiten
Code-Auszug:
Erläuterung:
FlightBooking, TrainBooking and HotelBooking
sind verschiedene Subsysteme des großen Systems:TravelFacade
TravelFacade
bietet eine einfache Oberfläche, um eine der folgenden Optionen zu buchenDie Buch-API von TravelFacade ruft intern die folgenden APIs von Subsystemen auf
Auf diese Weise wird
TravelFacade
eine einfachere und einfachere API bereitgestellt, ohne dass Subsystem-APIs verfügbar gemacht werden müssen.Wichtige Erkenntnisse : (aus dem journaldev- Artikel von Pankaj Kumar )
Schauen Sie sich zum besseren Verständnis auch den Artikel zur Quellenherstellung an .
quelle
Das Fassadenmuster ist eine Hülle für viele andere Schnittstellen, um eine einfachere Schnittstelle zu erhalten.
Entwurfsmuster sind nützlich, da sie wiederkehrende Probleme lösen und den Code im Allgemeinen vereinfachen. In einem Entwicklerteam, das sich bereit erklärt, dieselben Muster zu verwenden, werden Effizienz und Verständnis verbessert, wenn der Code des jeweils anderen gepflegt wird.
Versuchen Sie, mehr Muster zu lesen:
Fassadenmuster: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
oder allgemeiner: http://www.dofactory.com/Patterns/Patterns.aspx
quelle
Eine zusätzliche Verwendung des Fassadenmusters könnte darin bestehen, die Lernkurve Ihres Teams zu verkürzen. Lassen Sie mich Ihnen ein Beispiel geben:
Nehmen wir an, dass Ihre Anwendung mit MS Excel interagieren muss, indem Sie das von Excel bereitgestellte COM-Objektmodell verwenden. Einer Ihrer Teammitglieder kennt alle Excel-APIs und erstellt darüber eine Fassade, die alle grundlegenden Szenarien der Anwendung erfüllt. Kein anderes Mitglied des Teams muss Zeit mit dem Erlernen der Excel-API verbringen. Das Team kann die Fassade verwenden, ohne die Interna oder alle MS Excel-Objekte zu kennen, die an der Erfüllung eines Szenarios beteiligt sind. Ist es nicht toll?
Somit bietet es eine vereinfachte und einheitliche Schnittstelle über einem komplexen Subsystem.
quelle
Ein weiteres Beispiel für eine Fassade: Angenommen, Ihre Anwendung stellt eine Verbindung zur Datenbank her und zeigt die Ergebnisse auf der Benutzeroberfläche an. Sie können die Fassade verwenden, um Ihre Anwendung konfigurierbar zu machen, z. B. beim Ausführen mithilfe einer Datenbank oder mit Scheinobjekten. Sie führen also alle Datenbankaufrufe an die Fassadenklasse durch, wo sie die App-Konfiguration liest und entscheidet, die Datenbankabfrage auszulösen oder das Scheinobjekt zurückzugeben. Auf diese Weise wird die Anwendung db-unabhängig, falls db nicht verfügbar ist.
quelle
Eine Fassade enthüllt vereinfachte Funktionen, die meistens aufgerufen werden, und die Implementierung verbirgt die Komplexität, mit der sich Kunden sonst befassen müssten. Im Allgemeinen verwendet die Implementierung mehrere Pakete, Klassen und Funktionen. Gut geschriebene Fassaden machen den direkten Zugriff auf andere Klassen selten. Zum Beispiel, wenn ich einen Geldautomaten besuche und einen Betrag abhebe. Der Geldautomat verbirgt, ob er direkt zur eigenen Bank geht oder über ein ausgehandeltes Netzwerk für eine externe Bank. Der Geldautomat wirkt wie eine Fassade, die mehrere Geräte und Subsysteme verbraucht, mit denen ich mich als Kunde nicht direkt befassen muss.
quelle
Es gibt ein sehr gutes Beispiel aus der Praxis für das Muster - den Autostarter .
Als Fahrer schalten wir einfach den Schlüssel ein und das Auto startet. So einfach wie möglich. Hinter den Kulissen sind viele andere Autosysteme beteiligt (wie Batterie, Motor, Kraftstoff usw.), damit das Auto erfolgreich startet, aber sie sind hinter dem Anlasser versteckt.
Wie Sie sehen können, ist der Autostarter die Fassade. Es gibt uns eine einfach zu bedienende Oberfläche, ohne uns um die Komplexität aller anderen Autosysteme sorgen zu müssen.
Fassen wir zusammen:
Das Fassadenmuster vereinfacht und verbirgt die Komplexität großer Codeblöcke oder APIs und bietet eine übersichtlichere, verständlichere und benutzerfreundlichere Oberfläche.
quelle
quelle
Quelle: https://sourcemaking.com/design_patterns/facade
quelle
Ein Entwurfsmuster ist eine allgemeine wiederverwendbare Lösung für ein häufig auftretendes Problem in einem bestimmten Kontext des Softwareentwurfs.
Das Fassadenentwurfsmuster ist ein Strukturmuster, da es eine Art und Weise zum Erstellen von Beziehungen zwischen Klassen oder Entitäten definiert. Das Fassadenentwurfsmuster wird verwendet, um eine vereinfachte Schnittstelle zu einem komplexeren Subsystem zu definieren.
Das Fassadenmuster ist ideal, wenn Sie mit einer großen Anzahl von voneinander abhängigen Klassen arbeiten oder mit Klassen, die die Verwendung mehrerer Methoden erfordern, insbesondere wenn sie kompliziert zu verwenden oder schwer zu verstehen sind. Die Fassadenklasse ist ein "Wrapper", der eine Reihe von Elementen enthält, die leicht zu verstehen und einfach zu verwenden sind. Diese Mitglieder greifen im Namen des Fassadenbenutzers auf das Subsystem zu und verbergen die Implementierungsdetails.
Das Fassadenentwurfsmuster ist besonders nützlich, wenn Subsysteme verpackt werden, die schlecht gestaltet sind, aber nicht überarbeitet werden können, weil der Quellcode nicht verfügbar ist oder die vorhandene Schnittstelle häufig verwendet wird. Manchmal können Sie sich dafür entscheiden, mehr als eine Fassade zu implementieren, um Teilmengen von Funktionen für verschiedene Zwecke bereitzustellen.
Ein Beispiel für die Verwendung des Fassadenmusters ist die Integration einer Website in eine Geschäftsanwendung. Die vorhandene Software kann große Mengen an Geschäftslogik enthalten, auf die auf bestimmte Weise zugegriffen werden muss. Die Website erfordert möglicherweise nur eingeschränkten Zugriff auf diese Geschäftslogik. Beispielsweise muss auf der Website möglicherweise angezeigt werden, ob ein zum Verkauf stehender Artikel einen begrenzten Lagerbestand erreicht hat. Die IsLowStock-Methode der Fassadenklasse könnte einen Booleschen Wert zurückgeben, um dies anzuzeigen. Hinter den Kulissen könnte diese Methode die Komplexität der Verarbeitung des aktuellen physischen Bestands, des eingehenden Bestands, der zugewiesenen Artikel und des niedrigen Lagerbestands für jeden Artikel verbergen.
quelle
Alle Entwurfsmuster sind einige Klassen, die auf die eine oder andere Weise angeordnet sind und für eine bestimmte Anwendung geeignet sind. Der Zweck des Fassadenmusters besteht darin, die Komplexität einer Operation oder von Operationen zu verbergen. Sie können ein Beispiel sehen und das Fassadenmuster unter http://preciselyconcise.com/design_patterns/facade.php lernen
quelle
Es wird einfach ein Wrapper erstellt, um mehrere Methoden aufzurufen. Sie haben eine A-Klasse mit Methode x () und y () und eine B-Klasse mit Methode k () und z (). Sie möchten x, y, z gleichzeitig aufrufen. Dazu erstellen Sie mithilfe des Fassadenmusters einfach eine Fassadenklasse und erstellen eine Methode, z. B. xyz (). Anstatt jede Methode (x, y und z) einzeln aufzurufen, rufen Sie einfach die Wrapper-Methode (xyz ()) der Fassadenklasse auf, die diese Methoden aufruft.
Ein ähnliches Muster ist das Repository, jedoch hauptsächlich für die Datenzugriffsschicht.
quelle
Es handelt sich im Grunde genommen um ein System zur Freigabe einzelner Fenster. Sie weisen jede Arbeit, die delegiert wird, einer bestimmten Methode in einer anderen Klasse zu.
quelle
Das Fassadenentwurfsmuster fällt unter das Strukturentwurfsmuster. Kurz gesagt bedeutet Fassade das äußere Erscheinungsbild. Dies bedeutet, dass wir im Fassadenmuster etwas verbergen und nur zeigen, was der Kunde tatsächlich benötigt. Lesen Sie mehr im folgenden Blog: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
quelle
Das Fassadenmuster bietet eine einheitliche Schnittstelle zur Schnittstellengruppe des Subsystems. Die Fassade definiert eine übergeordnete Schnittstelle, die die Arbeit mit dem Subsystem vereinfacht.
quelle