<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Fassade by </title>
      <link>https://padlet.com/patrick_wade1/q4hsb899ynh2</link>
      <description>Quelle https://www.philipphauer.de/study/se/design-pattern/facade.php</description>
      <language>en-us</language>
      <pubDate>2019-12-16 09:22:56 UTC</pubDate>
      <lastBuildDate>2024-06-03 11:31:02 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>Fassade</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424432273</link>
         <description><![CDATA[<div><strong>Gang of Four Definition:<br></strong>"Biete eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems.<br>Die Fassadenklasse definiert eine abstrakte Schnittstelle, welche die Verwendung des Subsystems vereinfacht."</div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:23:23 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424432273</guid>
      </item>
      <item>
         <title>Problemstellung</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434274</link>
         <description><![CDATA[<div>Gegeben sei ein komplexes Subsystem mit vielen Klassen und Abhängigkeiten zwischen ihnen. <br>Clients die dieses Subsystem oder Teile davon nutzen möchten, müssen sich mit den verschiedenen Schnittstellen der enthaltenen Klassen befassen und die Funktionsweise verstehen. <br>Dabei bauen sie zwangläufig viele Abhängigkeiten zu verschiedenen Objekten auf und koppeln sich eng an die Klassen des Subsystems.</div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:31:45 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434274</guid>
      </item>
      <item>
         <title>Lösung durch Fassade</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434511</link>
         <description><![CDATA[<div>Die Facade  wird zwischen Clients und dem Subsystem geschaltet. Es "kapselt" dabei das Subsystem, beinhaltet die komplexe Logik zum Arbeiten mit dem Subsystem und bietet für den Client eine <strong>vereinfachte Schnittstelle</strong> (Methoden) nach außen an.<br> Die Fassade delegiert die Clientaufrufe ans Subsystem. Dadurch kann der Client das System über die Facade nutzen, ohne die Klassen, ihre Beziehungen, und Abhängigkeiten zu kennen.</div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:32:34 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434511</guid>
      </item>
      <item>
         <title></title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434804</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/442195720/5f3c4256979efc9e48ffd181b2dd7362/image.png" />
         <pubDate>2019-12-16 09:33:44 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424434804</guid>
      </item>
      <item>
         <title></title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437213</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/442195720/d918ddf40152f814433cb2da05b8e188/image.png" />
         <pubDate>2019-12-16 09:42:20 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437213</guid>
      </item>
      <item>
         <title>Konkretes Beispiel</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437330</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:42:48 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437330</guid>
      </item>
      <item>
         <title>Problemstellung</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437741</link>
         <description><![CDATA[<ul><li><strong>Systemwissennotwendig</strong>. Jeder Client muss nicht nur jede benötigte Klasse des Systems kennen, sondern auch ihr Zusammenspiel und ihre Funktionsweise, um sie nutzen zu können.</li><li><strong>Abhängigkeiten</strong> und geringe <strong>Änderungsstabilität</strong>. Da jeder Client viele verschiedene Klassen kennen muss, steigen seine Abhängigkeiten. Er ist hart an das System gekoppelt. Änderungen am System (Dokumente sollen speziell eingepackt werden, Briefmarken werden teuerer, die Drucker-API ändert sich, ein neues Textverarbeitungsprogramm mit anderer API wird eingeführt, Macs werden statt PCs verwendet ;-) ) führen zwangläufig dazu, dass der Clientcode bricht oder nicht mehr korrekt funktioniert - und das gilt für <em>jeden</em> Client, der das System nutzt. Die Folge ist hoher <strong>Wartungsaufwand</strong>.</li><li><strong>Coderedundanz</strong> und <strong>Gefahr von Inkonsistenz</strong>. Alle Clients, die ein Schreiben aufsetzen, drucken und verschicken wollen, müssen immer den gleichen Code schreiben. Dabei kann es sehr schnell passieren, dass Schritte ausgelassen werden oder die APIs falsch verwendet wird.</li></ul><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:44:20 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437741</guid>
      </item>
      <item>
         <title></title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437930</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/442195720/e6309c861ed3f050313a9b4fcaaca76a/image.png" />
         <pubDate>2019-12-16 09:45:05 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424437930</guid>
      </item>
      <item>
         <title>Code Sekretär</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438319</link>
         <description><![CDATA[<div>class Sekretaer {<br><br>    public void schreibenVersenden(String text){<br>        //Gegeben: Alle benötigten Klassen sind korrekt instanziiert, initialisiert und bekannt<br><br>        //Computer muss angeschaltet werden.<br>        computer.an();<br>        //Das Textverarbeitungsprogramm muss geöffnet werden.<br>        Textverarbeitungsprog textverarbeitungsprog = computer.getTextverarbeitungsprog();<br>        textverarbeitungsprog.oeffnen();<br>        //Mit dem Textverarbeitungsprogramm muss das Dokument erstellt werden<br>        Dokument dokument = textverarbeitungsprog.getDokument(text);<br>        //Drucker muss angeschaltet werden<br>        drucker.an();<br>        //Drucker muss konfiguriert werden<br>        drucker.konfigurieren();<br>        //Papier muss in den Drucker gelegt werden<br>        drucker.papierNachfuellen();<br>        //Das Dokument muss gedruckt werden<br>        computer.drucke(dokument);<br>        //Der Drucker sollte ausgeschaltet werden<br>        drucker.aus();<br>        //Der Computer sollte ausgeschaltet werden<br>        computer.aus();<br>        //Das Dokument muss mit dem Stift unterschrieben werden<br>        stift.unterschreiben(dokument);<br>        //Das Dokument muss mit dem Stempel gestempelt werden<br>        stempel.stempel(dokument);<br>        //Das Dokument muss mit Hilfe des Briefmarkenautomaten frankiert werden<br>        briefmarkenautomat.briefmarkeBezahlen(dokument, 2);<br>        //Das Dokument muss schließlich in den Briefkasten geworfen werden.<br>        briefkasten.briefEinwerfen(dokument);<br>    }<br>    <br>    //Instanzvariable der genutzten Objekte Computer, Drucker, Stift etc.<br>}	</div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:46:38 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438319</guid>
      </item>
      <item>
         <title>Sekretär verwenden</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438424</link>
         <description><![CDATA[<div>Sekretaer sekretaer = new Sekretaer();<br>sekretaer.schreibenVersenden("Dieser Text soll verschickt werden");</div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:47:10 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438424</guid>
      </item>
      <item>
         <title>Vorteile</title>
         <author>patrick_wade1</author>
         <link>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438578</link>
         <description><![CDATA[<ul><li>Der Sekretär <strong>vereinfacht die Benutzung</strong> unseres Klassensystems durch den Client. Dieser muss fortan <strong>kein Wissen</strong> mehr um die notwendigen Klassen und Verarbeitungsschritte zum Aufsetzen und Verschicken eines Schreibens besitzen. Natürlich kann die Schnittstelle des Sekretärs beliebig um weitere Methoden zur einfachen Nutzung anderer Systemfunktionalitäten <strong>erweitert</strong> werden.</li><li>Clients, die nur ausgewählte Klassen unseres Systems nutzen wollen oder anspruchsvollere Aufgaben mit dem System erledigen möchten, für die die Schnittstelle des Sekretärs nicht ausreicht, können die Klassen weiterhin direkt nutzen. Natürlich kann dies auch verhindert werden. Siehe <a href="https://www.philipphauer.de/study/se/design-pattern/facade.php#variationen">Variationen</a>.</li><li><strong>Wartbarkeit</strong> und <strong>Änderungsstabilität</strong> durch verringerte <strong>Abhängigkeiten</strong> und <strong>lose Kopplung</strong> zwischen Client und System. Der Client ist fortan nur noch von einer einzigen Klasse abhängig: dem Sekretär, der den Zugriff auf das System vereinheitlicht und vereinfacht. Änderungen an Klassen des Systems haben keinen direkten Einfluss mehr auf Code der Clients, solange diese auch ausschließlich den Sekretär nutzen. Änderungen an Systemklassen (andere Drucker-API oder Textverarbeitungs-API) schlagen höchstens bis in die Implementierung der Sekretärmethode schreibenAufsetzen() durch. Die Sekretär-API nach außen bleibt jedoch konstant. Siehe <a href="https://www.philipphauer.de/study/se/design-pattern/facade.php#vorteile">Vorteile</a>.</li><li>Betrachten wir den Sekretär als <strong>Einstiegspunkt</strong> zu unserem System, so ist es auch denkbar, innerhalb des Systems weitere solcher Einstiegspunkte und Subsysteme zu definieren (beispielsweise eine Klasse Postfiliale mit einer vereinfachten Schnittstelle zum Frankieren und Absenden von Post mit den Systemklassen Briefmarkenautomat und Briefkasten). Dadurch realisieren wir einen <strong>Schichtenaufbau</strong> unseres Systems.</li><li>Keine <strong>Coderedundanz</strong> und Gefahr von <strong>Inkonsistenz</strong> beim Client. Da der Code zum Aufsetzen und Versenden von Dokumenten zentral bei dem Sekretär implementiert wurde, kann jeder Client diesen nutzen und muss ihn nicht jedes mal neu implementieren.</li></ul><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2019-12-16 09:47:45 UTC</pubDate>
         <guid>https://padlet.com/patrick_wade1/q4hsb899ynh2/wish/424438578</guid>
      </item>
   </channel>
</rss>
