Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade



Ähnliche Dokumente
40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Sie müssen sich für diesen Fall mit IHREM Rechner (also zeitgut jk o.ä.) verbinden, nicht mit dem Terminalserver.

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Was ich als Bürgermeister für Lübbecke tun möchte

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Leichte-Sprache-Bilder

Das Persönliche Budget in verständlicher Sprache

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Das Leitbild vom Verein WIR

Windows 7: Neue Funktionen im praktischen Einsatz - Die neue Taskleiste nutzen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Tutorial/FAQ für die Benutzung der Webseite

! " # $ " % & Nicki Wruck worldwidewruck

Professionelle Seminare im Bereich MS-Office

1: 9. Hamburger Gründerpreis - Kategorie Existenzgründer :00 Uhr

Leitfaden zur Nutzung von binder CryptShare

Schritt 1. Anmelden. Klicken Sie auf die Schaltfläche Anmelden

Datensicherung. Beschreibung der Datensicherung

Gutes Leben was ist das?

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Holiday plans: ein Gespräch über Urlaubspläne

Anleitung über den Umgang mit Schildern

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Java: Vererbung. Teil 3: super()

Statuten in leichter Sprache

CSS-Grundlagen. Etwas über Browser. Kapitel. Die Vorbereitung

10.1 Auflösung, Drucken und Scannen

Abwesenheitsnotiz im Exchangeserver 2010

Internationales Altkatholisches Laienforum

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Abwesenheitsnotiz im Exchange Server 2010

Info-Veranstaltung zur Erstellung von Zertifikaten

50 Fragen, um Dir das Rauchen abzugewöhnen 1/6

Die elektronische Rechnung als Fortsetzung der elektronischen Beauftragung so einfach geht es:

Stapelverarbeitung Teil 1

ICS-Addin. Benutzerhandbuch. Version: 1.0

Warum tun manche Menschen nicht das, was Sie als Führungskraft von ihnen erwarten?

Bett im Berlingo eine Idee zum Nachbauen

Mein persönlicher Lerncheck: Einen Bericht schreiben

TeamSpeak3 Einrichten

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Sie finden im Folgenden drei Anleitungen, wie Sie sich mit dem Server der Schule verbinden können:

Ich möchte eine Bildergalerie ins Internet stellen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Platinen mit dem HP CLJ 1600 direkt bedrucken ohne Tonertransferverfahren

Predigt Salvenmoser: Nun aber bleiben Glaube, Hoffnung, Liebe.

Variablen & erweiterte Aktionen nutzen

YouTube: Video-Untertitel übersetzen

Erste Schritte in der Lernumgebung

Task: Nmap Skripte ausführen

Dow Jones am im 1-min Chat

.NET Code schützen. Projekt.NET. Version 1.0

SEMINAR Modifikation für die Nutzung des Community Builders

Die Bundes-Zentrale für politische Bildung stellt sich vor

Video-Tutorial: Einrichten einer Facebook Landing Page in der Facebook Chronik (Timeline)

Was kann ich jetzt? von P. G.

COMPUTER MULTIMEDIA SERVICE

Zwischenablage (Bilder, Texte,...)

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

WAS finde ich WO im Beipackzettel

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Summenbildung in Bauteiltabellen mit If Then Abfrage

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Wir machen neue Politik für Baden-Württemberg

Einrichtung eines VPN-Zugangs

Einführung in die Java- Programmierung

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen.

Übung - Datensicherung und Wiederherstellung in Windows 7

Anspruchsvolle Dreierausdrücke zum selbstständigen Lernen

Was meinen die Leute eigentlich mit: Grexit?

Anwendungsbeispiele Buchhaltung

Erfahrungen mit Hartz IV- Empfängern

Konvertieren von Settingsdateien

Wien = Menschlich. freigeist.photography

Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen.

vor 2 Tagen erhielt ich einen Anruf eines Ihrer Kundenberater (Herr Kirsch) mit dem Angebot der Vertragsverlängerung für meinen Mobilfunkvertrag.

Arbeiten mit UMLed und Delphi

Computeria Solothurn

4 Ideen zur Verbesserung des -Marketings!

Eine Google adresse anlegen und loslegen

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

1. Richtig oder falsch? R F

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Elma van Vliet. Mama, erzähl mal!

Wie halte ich Ordnung auf meiner Festplatte?

Wasserzeichen mit Paint-Shop-Pro 9 (geht auch mit den anderen Versionen. Allerdings könnten die Bezeichnungen und Ansichten etwas anders sein)

Es gilt das gesprochene Wort. Anrede

Fotos in Tobii Communicator verwenden

Jetzt neu: Online Reporting Schritt für Schritt durch das Online Reporting (OLR) Online Liedmeldung

Tevalo Handbuch v 1.1 vom

Nach der Installation kann es auch schon losgehen. Für unseren Port Scanner erstellen wir zunächst ein neues Projekt:

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Transkript:

HACK #76 Hack APIs mit dem Façade-Muster vereinfachen Durch die Verwendung des Façade-Entwurfsmusters können Sie die anderen Programmierern zugängliche API vereinfachen. #76 Dies ist ein Muster, von dem ich mir wünsche, dass es viel mehr Programmierer einsetzen, und zwar nicht nur wegen des lustigen Kringels unter dem c in Façade. Die Verwendung des Fassadenmusters zeigt mir, dass ein anderer Programmierer an mich gedacht hat und mir nur die nötigen Informationen bereitstellt (und sonst nichts, was ich möglicherweise kaputtmachen könnte). In Abbildung 7-10 sehen Sie eine einfache API zum Erstellen von Protokollen. log_start(filename) log_message(message) log_end() Log xmllog textlog Log() start(filename) end() instance() XMLLog firstname doc log XMLLog(fileName) close() TextLog filename TextLog(fileName) close() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade Diese API kann in XML, Text oder in beiden Formaten protokollieren. Wow! Da ich selbst programmiere, beeindruckt mich die Kunstfertigkeit dieses Codes. Scheinbar gibt es für alles eine passende Methode: für den Beginn einer Nachricht, das Hinzufügen von Text, Aufräumen selbst die Behandlung von XML und Text ist einfach. Allerdings würde mich doch sehr interessieren, welche Methode ich wann benutzen soll. Und genau an dieser Stelle kommt das Façade-Muster ins Spiel. Es stellt sicher, dass ich die API korrekt benutze. In unserem Beispiel ist die Fassade die Liste der drei Funktionen ganz links in der Darstellung. Die vertikale Linie besagt in etwa:»ich bin für den Kram auf der rechten Seite zuständig. Ruf einfach meine Methoden auf, und ich erledige den Rest.«Eine Fassade kann aber nicht nur APIs vereinfachen, sondern auch Implementierungsdetails vor einem Client verstecken. Auf diese Weise kann sich die Implementierung komplett verändern, ohne dass die Clients jemals etwas davon mitbekommen. Diese Eigenschaft ist mindestens genauso wichtig wie Hack #76: Das Factory-Method-Entwurfsmuster 335

#76 APIs mit dem Façade-Muster vereinfachen die Vereinfachung, die der Einsatz des Façade-Musters mit sich bringt. Vergessen Sie nicht, dass eine lose Bindung für starke und verlässliche Systeme sorgt. Der Code Sichern Sie den Code aus Beispiel 7-12 in der Datei test.php. Beispiel 7-12: Der Testcode für die Protokoll-API require( "log.php" ); log_start( "mylog" ); log_message( "Starte Programm" ); log_message( "Eine Nachricht für das Protokoll" ); log_message( "Beende Programm" ); log_end( ); Der Code in Beispiel 7-13 gehört in die Datei log.php. Beispiel 7-13: Die Fassade für die Protokollierung require( "log_impl.php" ); function log_start( $filename ) Log::instance( )->start( $filename ); function log_message( $message ) Log::instance( )->add( $message ); function log_end( ) Log::instance( )->end( ); In Beispiel 7-14 finden Sie den Code für log_impl.php. Beispiel 7-14: Die Protokollierungsbibliothek hinter der Fassade class XMLLog private $filename; private $doc; private $log; 336 Kapitel 7: Entwurfsmuster

Beispiel 7-14: Die Protokollierungsbibliothek hinter der Fassade (Fortsetzung) public function XMLLog( $filename ) $this->filename = $filename; $this->doc = new DOMDocument( ); $this->doc->formatoutput = true; $this->log = $this->doc->createelement( "log" ); $this->doc->appendchild( $this->log ); $mess_obj = $this->doc->createelement( "message" ); $text = $this->doc->createtextnode( $message ); $mess_obj->appendchild( $text ); $this->log->appendchild( $mess_obj ); public function close( ) $this->doc->save( $this->filename ); class TextLog private $fh; public function TextLog( $filename ) $this->fh = fopen( $filename, "w" ); fprintf( $this->fh, $message."\n" ); public function close( ) fclose( $this->fh ); class Log private $xmllog = null; private $textlog = null; Hack #76: Das Factory-Method-Entwurfsmuster 337

#76 APIs mit dem Façade-Muster vereinfachen Beispiel 7-14: Die Protokollierungsbibliothek hinter der Fassade (Fortsetzung) public function Log( ) public function start( $filename ) $this->xmllog = new XMLLog( $filename.".xml" ); $this->textlog = new TextLog( $filename.".txt" ); $this->xmllog->add( $message ); $this->textlog->add( $message ); public function end( ) $this->xmllog->close( ); $this->textlog->close( ); public static function instance( ) static $inst = null; if (!isset( $inst ) ) $inst = new Log( ); return $inst; Den Hack ausführen Dieser Hack wird mit dem PHP-Interpreter auf der Kommandozeile ausgeführt: % php test.php % cat mylog.txt Starte Programm Eine Nachricht für das Protokoll Beende Programm % cat mylog.xml <?xml version="1.0" <log> <message>starte Programm</message> <message>eine Nachricht für das Protokoll</message> <message>beende Programm</message> </log> Viel gibt es hier nicht zu sehen. Schließlich sind wir eher am Code selbst und nicht an dessen Ausgaben interessiert. Im Skript test.php wird das Protokoll 338 Kapitel 7: Entwurfsmuster

geöffnet, ein paar Meldungen werden ausgegeben, und schließlich wird das Protokoll wieder geschlossen. Gesteuert wird dies durch die Fassade in log. php. In einer idealen Umgebung wäre das Skript log.php das einzige, auf das»außen stehende«programmierer Zugriff hätten. In der Datei log.php verwenden wir das Singleton-Objekt [Hack #77] Log aus dem Skript log_impl.php, um zwei Logs zu erzeugen. Danach werden die Meldungen an die einzelnen Logs geschickt, die die Nachrichten dann als Text oder XML ausgeben. Hack #76: Das Factory-Method-Entwurfsmuster 339