Komponentenbasierte Softwareentwicklung mit PHP. Oliver Schlicht - bitexpert



Ähnliche Dokumente
Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Objektorientierte Programmierung OOP

C# im Vergleich zu Java

Java: Vererbung. Teil 3: super()

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw,

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Application Frameworks

Grundlagen von Python

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

SDD System Design Document

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Design Pattern - Strukturmuster. CAS SWE - OOAD Marco Hunziker Klaus Imfeld Frédéric Bächler Marcel Lüthi

Themen. Web Services und SOA. Stefan Szalowski Daten- und Online-Kommunikation Web Services

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Java Enterprise Architekturen Willkommen in der Realität

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Eclipse Plugins für die komfortablere Verwendung von ibatis SQLMaps

Fragen und Antworten

BIF/SWE - Übungsbeispiel

Objektorientierte Programmierung

ISA Einrichtung einer DFUE VErbindung - von Marc Grote

GISA. Definition Spoolfiles

How-to: Webserver NAT. Securepoint Security System Version 2007nx

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Schluss mit langweiligen Papierexposees! Die Zukunft heißt immodisplay. Vision Displays GmbH Schnackenburgallee 41b Hamburg

SJ OFFICE - Update 3.0

Bedienungsanleitung PC-Konfigurationssoftware des ID Inclinometers

Universität Zürich Informatikdienste. SpamAssassin. Spam Assassin Go Koordinatorenmeeting 27. April

Schedulingund Thread-Ausführer

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

MailUtilities: Remote Deployment - Einführung

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

e-books aus der EBL-Datenbank

SE2-10-Entwurfsmuster-2 15

Robot Karol für Delphi

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Anforderungen an die HIS

Databear Software Installer

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

Neue Funktionen im GUI für PC-DMIS V3.x 4.x Seite 1 von 8

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Filemaker Module. Einführung in die Vorteile modularer Filemaker Programmierung. Karsten Risseeuw, Kursiv Software

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Übung - Freigabe eines Ordners und Zuordnung eines Netzwerlaufwerks in Windows XP

Warum sich das Management nicht für agile Softwareentwicklung interessieren sollte - aber für Agilität

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

StuPro-Seminar Dokumentation in der Software-Wartung. StuPro-Seminar Probleme und Schwierigkeiten in der Software-Wartung.

Eine Anwendung mit InstantRails 1.7

Professionelle Seminare im Bereich MS-Office

Konfiguration des ewon GSM Modems Kurzbeschreibung zum Aufbau einer GSM Verbindung

Software Engineering. Dokumentation! Kapitel 21

INFORMATION MONITOR HSM SOFTWARE GMBH CLIENT-INSTALLATION

Javakurs 2013 Objektorientierung

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prinzipien Objektorientierter Programmierung

Design Patterns 2. Model-View-Controller in der Praxis

OO Softwareentwicklung

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

NAS 308 Einführung in iscsi

Software Engineering. Dokumentation. Wintersemester 2005/06. Kapitel 21. Universität Zürich Institut für Informatik

RFID Lösungen Fragebogen über Ihr RFID Projekt

Übung - Datenmigration in Windows XP

DIGITALVARIO. Anleitung Bootloader. Ausgabe 0.1 deutsch für Direkt-Digital-Vario. Firmware ab Hardware 01 Seriennummer ab 0003

Mastermind. Testplan. Hochschule Luzern Technik & Architektur. Programmieren 2 FS12. Gruppe 10

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

SEMINAR Modifikation für die Nutzung des Community Builders

Kurzleitfaden für Schüler

Anleitung zur Nutzung des SharePort Utility

Man liest sich: POP3/IMAP

Updatehinweise für die Version forma 5.5.5

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

U08 Entwurfsmuster (II)

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

» Export von Stud.IP-Daten auf eigene Web-Seiten» Workshop Donnerstag,

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

Softwaretechnik (Allgemeine Informatik) Überblick

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Application Service Providing ASP - das neue Geschäftsmodell im ecommerce!

Was ist Sozial-Raum-Orientierung?

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Handbuch USB Treiber-Installation

Dr. Simon Giesecke Falko Basner Dr. Jörg Friebe. Bad Honnef, 3. Mai 2010

Informationswirtschaft II Rational Unified Process (RUP)

Informationswirtschaft II

Testen mit JUnit. Motivation

LimeSurvey -Anbindung

Präsentation Von Laura Baake und Janina Schwemer

Auswahl alter Klausuraufgaben aus einer ähnlichen Vorlesung Maßgeblich für die Prüfung sind die Vorlesungsinhalte!

Transkript:

Komponentenbasierte Softwareentwicklung mit PHP Oliver Schlicht - bitexpert

Überblick 1. Was ist eine Komponente? 2. Entwicklung eines Beispieldesigns 3. Dependency Injection 4. DI Container Garden 5. Demo 6. FAQ 7. Zusammenfassung ng 8. Ausblick Oliver Schlicht - bitexpert 2

1. Was ist eine Komponente Beispiel: Wohnraumkomponente ;) Oliver Schlicht - bitexpert 3

1. Was ist eine Komponente? Angebote Funktionalität von Fernseher ein- und ausschalten Sender wählen Funktionalitätsumfang basiert auf dem Interface Fernseher nicht auf dem eigentlichen Gerät Fernseher, nicht auf dem eigentlichen Gerät Oliver Schlicht - bitexpert 4

1. Was ist eine Komponente? Benötigte Funktionalität: Strom Fernsehanschluss es wird nur spezifiziert WAS benötigt wird, nicht WIE das Benötigte arbeitet es können verschiedene Geräte an den Fernsehanschluss angeschlossen werden, solang sie die benötigte Spezifikation erfüllen Oliver Schlicht - bitexpert 5

1. Was ist eine Komponente? Zusammenfassung: Angebotene Funktionalität (Provided Interface, PI) Benötigte Funktionalität (Required Interface, RI) Black Box austauschbar Übertragung in (PHP)OO-Welt Komponente == Klasse? Angebotene Funktionalität -> Klassenschnittstelle Benötigte Funktionalität ->? Oliver Schlicht - bitexpert 6

2. Entwicklung eines Beispieldesigns Ratingsystem - Anforderungen Ausgangspunkt: Ebay ohne Bewertungssystem Kunden sollen Anbieter nach erfolgter Geschäftsabwicklung bewerten können Anbieter tragen ein Rating mit sich, welches durch abgegebene g Reviews beeinflusst und verändert wird Komponente RatingManager Datentypen: BOCustomer, BOReview DAO: DAOCustomer, DAOReview Oliver Schlicht - bitexpert 7

2. Entwicklung eines Beispieldesigns Erster Entwurf Service Layer Komponente service::ratingmanager Business Objects (Datentypen) «interface» bo::ibo +bookreview(ein ireviewid : int) DAO Layer dao::dao +readbyprimarykey(ein iprimarykey : int) +save(ein pobo : IBO) dao::daocustomer dao::daoreview bo::bocustomer -icustomerid : int -sname : string -icustomernumber : int bo::boreview -ireviewid : int -icustomerid : int -iproviderid : int Abhängigkeiten Oliver Schlicht - bitexpert 8

2. Entwicklung eines Beispieldesigns Analyse Probleme Schritt 1 Kein PI Nutzende Komponenten binden sich direkt an die Implementierung Kein RI Benutzer der Komponente weiß nichts über versteckte Abhängigkeit direkte Kopplung an Implementierung von benötigten Komponenten Feste Bindung sorgt für schlechte Austauschbarkeit und Untestbarkeit Programmieren gegen Interfaces Oliver Schlicht - bitexpert 9

2. Entwicklung eines Beispieldesigns Interfaces für Komponenten einführen Service Layer «interface» service::iratingmanager +bookreview(ein ireviewid : int) impl::ratingmanager Business Objects (Datentypen) «interface» bo::ibo «interface» dao::idaocustomer DAO Layer impl::dao +readbyprimarykey(ein iprimarykey : int) +save(ein pobo : IBO) «interface» dao::idaoreview bo::bocustomer -icustomerid : int -sname : string -icustomernumber : int bo::boreview -ireviewid : int -icustomerid : int -iproviderid : int impl::daocustomer impl::daoreview Oliver Schlicht - bitexpert 10

2. Entwicklung eines Beispieldesigns Analyse Probleme Keine PI Nutzende Komponenten binden sich direkt an die Implementierung Kein RI Benutzer der Komponente weiß nichts über versteckte Abhängigkeit direkte Kopplung an Implementierung Feste Bindung sorgt für schlechte Austauschbarkeit und Untestbarkeit WiekommtdieKomponenteanInstanzenbenötigter Klassen? Oliver Schlicht - bitexpert 11

2. Entwicklung eines Beispieldesigns Analyse Probleme Kein RI Schritt 2 Benutzer der Komponente weiß nichts über versteckte Abhängigkeit Wie kommt die Komponente an Instanzen benötigter Klassen? Dependency Injection Oliver Schlicht - bitexpert 12

3. Dependency Injection Objekt erzeugt Referenzen nicht selbst sondern bekommt sie zugewiesen ( Inversion of Control ) Folge: Abhängigkeiten sind an der Schnittstelle erkennbar (RI) Objekt bleibt passiv Referenzen können ausgetauscht werden (bessere Testbarkeit Oliver Schlicht - bitexpert 13

3. Dependency Injection Constructor Injection Vorteil Nach dem Instanziieren der Komponente weiß ich, dass ich ein fertig konfiguriertes Objekt habe Nachteil Im Nachhinein ist keine Umkonfiguration mehr möglich Setter Injection Vorteil Komponente wird zur Laufzeit umkonfigurierbar Nachteil evtl. Nullpointer durch nicht initialisierte Referenzen Oliver Schlicht - bitexpert 14

4. DI Container - Garden Problem Wer instanziiert die Komponente bzw. steuert den Lebenszyklus? Woher weiß derjenige, welche Instanz er einsetzen soll? Lösung: Container Stück Software, dass Komponenteninstanzen erzeugt, zerstört und Funktionalität für K. anbietet ermöglicht das Eingreifen in den Zyklus über Callbackinterfaces Oliver Schlicht - bitexpert 15

4. DI Container - Garden Garden (http://garden.clawphp.org/) angelehnt an Spring (www.springframework.org) Zugriff auf Komponenten über ApplicationContext im Prinzip eine Factory Beschreibung der Komponenten per XML Oliver Schlicht - bitexpert 16

4. DI Container - Garden Komponentenkonfiguration <beans> <! - Services --> <bean id= RatingManager class= service.ratingmanager > <constructor-arg ref= DAOCustomer /> <constructor-arg ref= DAOReview DAOReview /> </bean> <! DAOs --> <bean id= DAOCustomer class= dao dao.daocustomer DAOCustomer >.. </bean> <bean id= DAOReview class= dao.daoreview >.. </bean> </beans> Oliver Schlicht - bitexpert 17

4. DI Container - Garden Zugriff auf die Komponente <?php?> // Initialisieren des AC // XML File wird geparst $octx = ApplicationContext::getInstance(); // Komponente holen // (wird instanziiert oder aus dem Cache geladen) $oratingmanager = $octx->getbean( RatingManager ); $oratingmanager->bookreview(1); -> 5. Demo Oliver Schlicht - bitexpert 18

6. FAQ Welche Klassen werden Komponenten? Im allgemeinen Klassen die Dienste erbringen Keine Klassen die Datenstrukturen beschreiben Entwicklungsaufwand Overhead an XML Beschreibungsdaten Vorteile Klare Trennung von Komponentenschnittstelle, - implementierung und konfiguration (SOC) Komponente lässt sich durch einfaches Umkonfigurieren mehrfach nutzen Oliver Schlicht - bitexpert 19

6. FAQ Wie groß ist der Parsingaufwand? XML sollte nicht jedes Mal neu geparst werden -> Serialisieren i und din Datei ilegen Aktuelles Projekt (20000 Zeilen Code) -> 10 20 ms Globale Abhängigkeit vom ApplicationContext ACs sollten möglichst selten instanziiert werden Konfigurationsdaten über configvalue setzen Zugriff auf den AC über IApplicationContextAware Oliver Schlicht - bitexpert 20

7. Zusammenfassung Methodische Aspekte Trennung von Interface und Implementierung Deklarierung von PI und RI (zumindest durch Doku) Mit DI / Garden möglich Offenlegung des RI an der Schnittstelle der Klasse Trennung von Implementierung und Konfiguration Bessere (Unit) Testbarkeit der Komponenten Bessere Wartbarkeit / Wiederverwendung Oliver Schlicht - bitexpert 21

8. Ausblick Erweiterte Features des bitframework DI gesteuertes MVC Framework (ähnlich Spring MVC) ActionResolver, ViewResolver, Validatoren FormActions Vorgefertigte Komponenten / Basisklassen Authentifiziertung, Authorisierung, Transaktionshandling Geschäftsobjekte (BO), DataAccessObjects (DAO) Integration für PHPUnit Unittest, Integrationstest, transaktionale Integrationstests Utilities Mail, Datumsklassen, Logging usw. Oliver Schlicht - bitexpert 22

8. Fragen? Oliver Schlicht - bitexpert 23

Quellen Martin Fowler Dependency Injection http://www.martinfowler.com/articles/injection.html Steve MC McConnell Code Complete http://www.amazon.de/code-complete-deutsche-ausgabeder- Second/dp/386063593X/sr=8-2/qid=1168434807/ref=pd 8 pd_ka_2/302 2/302-8843512- 8120023?ie=UTF8&s=books Kontakt: o.schlicht@bitexpert.de ht@bite t Oliver Schlicht - bitexpert 24