Sonntag, 21. November 2010

SOTE am Freitag 26.11. entfällt

Hallo zusammen,

wie in der letzten Vorlesung schon angekündigt, bin ich am Freitag den 26.11 verhindert daher ENTFÄLLT diesen Freitag (26.11) die Vorlesung. Wir holen den Termin im Januar nach.

Viele Grüße

Christian Baranowski

Donnerstag, 18. November 2010

Build Prozesse und Java Servlets


Download Folien


Download ANT Quelltext 
Inhalt
  • Wiederholung Trennung fachliche und technischer Architektur 
  • Wiederholung Configuration Management
  • Build Prozesse
  • Einführung in Java Servlets Programmierung

Lernziele (Fragen zur Vorlesung)
  • Wozu benötigt man einen automatisierten Build Prozess?Aus welchen Phasen besteht der allgemeinen Build Prozess?
  • Wie können die einzelnen Phasen des allgemeinen Build Prozess (Schritte) mit Apache ANT umgesetzt werden?
  • Warum sollten Unit-Tests im Build Prozess integriert sein?
  • Was ist ein Servlet?
  • Von welcher Klasse erbt Ihr Servlet?
  • Wie kann Ihr Servlet auf Requestparameter zugreifen?
  • Unter welcher URL ruft man im Browser ein Servlet auf?
  • Wie unterscheiden sich GET und POST Requests?

ANT Sample Build.xml
Hier eine ANT Beispiel Build.xml für die Basar Web-Anwendung.



Literatur
  • Ant, The Definitive Guide, Steve Holzner - 2005
  • Head First Servlets and JSP, Bryan Basham, Kathy Sierra, Bert Bates - 2008
  • Core Servlets and JavaServer Pages 2, Marty Hall, Larry Brown - 2005
Links

    Mittwoch, 17. November 2010

    Build Prozesse und Configuration Management


    Download Folien
    hier


    Download Quelltext und Übungen
    Inhalt
    • Offene Themen zum Systementwurf
    • Einführung in Configuration Management mit Subversion (SVN)
    Lernziele (Fragen zur Vorlesung)
    • Welche Regeln muss man einhalten um Komponenten mit der eigentlichen fachlichen Logik von der verwendeten Technik (z.B. JDBC) zu trennen? 
    • In welche drei Bereiche sollte man ein SVN Repository für ein Projekt aufteilen?
    • Warum sollte man alle Projektartifakte (z.B. der Quelltext) immer unter Versionskontrolle stellen?
    • Was ist der semantische Unterschied zwischen einem Tag und einem Branch?
    • Gibt es in Subversion einen technischen Unterschied zwischen einem Branch und einem Tag?
    • Was ist eine Revision Nummer in Subversion?
    • Wie kann man die Revision Nummer für eine Datei oder einen Ordner abfragen in Subversion?
    • Wie können zwei Versionen einer Datei in Subversion verglichen werden?
    Subversion Cheat Sheet

    Checkout Projekt aus dem SVN-Repository 
    svn checkout https://sote2010.googlecode.com/svn/trunk/ sote2010

    Füge einen Ordner oder Dateien zur Versionskontrolle (SVN) hinzu
    svn add README
    svn add *

    Commit Changes in das SVN-Repository
    svn commit -m "Add a File README to the project."

    Get Changes from SVN-Repository
    svn update *
    svn update README

    Lokale Änderungen verwerfen
    svn revert

    Zeige den aktuellen Status der Änderungen an
    svn status

    Zeige die SVN Infos für eine Datei oder einen Ordner an (Revision, letzte Änderung im Repository am, usw.)
    svn info README
    svn info

    SVN Commit History
    svn log
    svn log README

    Vergleichen von zwei Revisionen einer Datei
    svn diff -r 5:6 README 

    Hilfe zu den SVN Commands
    svn help
    svn help merge
    svn help <command>

    Eine Datei markieren dass der Konflikt manuell behoben wurde (anschließend kann die Datei wird committed werden)
    svn resolved README

    Erstellen eines Branch oder Tag lokal (Subversion Kopie)
    svn copy team-baranowski tag01

    Erstellen eines Branch oder Tag remote (Subversion Kopie)
    svn copy https://sote2010.googlecode.com/svn/trunk https://sote2010.googlecode.com/svn/tags/0.0.1 -m "create tag with name 0.0.1"
    svn copy https://sote2010.googlecode.com/svn/trunk https://sote2010.googlecode.com/svn/branches/demobranch -m "create branch demobranch"

    Lokale Arbeitskopie auf einen Branch wechseln
    svn switch https://sote2010.googlecode.com/svn/branches/demobranch

    Subversion Branch in Trunk mergen
    svn merge https://sote2010.googlecode.com/svn/branches/demobranch

    Einen Order oder eine Datei aus dem SVN löschen
    svn del test-folder

    Aufräumen und Locks entfernen (Wenn gar nichts mehr geht!)
    svn cleanup
    svn update

    GIT Tutorial
    Hinweis: GIT haben wir leider in der Vorlesung aus Zeitgründen nicht mehr betrachtet. Wer sich aber für verteilte Versionskontrolle interessiert dem sei das folgende sehr gute GIT Einführungs-Video ans Herz gelegt. Das Thema GIT ist natürlich auch nicht Klausur relevant.



    Literatur
    • Version Control with Subversion, C. Michael Pilato, Ben Collins-Sussman , Brian W. Fitzpatrick - 2008 
    Links

    Musterlösung Domain Model Aufgabenverwaltung

    Hier eine Musterlösung für das Domain der Aufgabenverwaltung. Den Quelltext können all verwenden die in der Vorlesung "Domain Driven Design und Wiederholung" nicht anwesend waren.



    Quelltext Domain Model Aufgabenverwaltung:
    https://github.com/tux2323/software-technik-taskmanagement/tree/master/src/task/domain/

    Sonntag, 7. November 2010

    Domain Driven Design und Wiederholung

    Hinweis: Leider ist das Thema Build Prozesse und Configuration Management offen geblieben in der Vorlesung am 12.11.2010. Wir werden dieses Thema in Vorlesung am 18.11.2010 nachholen. Dadurch werden sich die Themeninhalte etwas verschieben. Im Moment liegen wir ca. eine Vorlesung hinter unserem ursprünglichen Plan.

    Download Folien
    hier


    Download Sample Domain Driven Design Code Basar
    https://github.com/tux2323/software-technik-basar/tree/master/src

    Inhalt
    • Wiederholung Anforderungsanalyse
    • Wiederholung Domain Driven Design
    • Abschluss Systementwurf und Design
    • Build Prozesse mit ANT

    Lernziele (Fragen zur Vorlesung)
    • In welche drei Schichten teilt man eine klassische Geschäftsanwendung auf? 
    • Welche fünf Begriffe des Domain Driven Design kennen Sie?
    • Wie beschreibt man einen Ablauf (Aufrufe) von Methoden mit der UML?  
    • Wodurch zeichnet sich eine Entity Classe

    Links und Literatur
    Für Literaturhinweise und Links siehe Blog-Einträge "Nachtrag Einführung in Domain Driven Design" und "Systementwurf mit UML und Einführung in Domain Driven Design".

      Montag, 1. November 2010

      Nachtrag Einführung in Domain Driven Design

      Ausgangssituation für das Design sind die erfassten Anwendungsfälle und das Fachmodell. Im Folgenden werde ich Ihnen knapp darlegen wie aus diesen beiden Modellen im ersten Schritt des Designs das Domain Modell mittels der Methoden Domain Driven Design erstellt werden kann als ein Schritt (Methode) für den Systementwurf.

      Die Anwendungsfälle haben wir werden der Anforderungsanalyse erfasst als UML Use-Case Diagramm und als Tabellen oder Prosatext im Pflichtenheft oder Gesamtspezifikation spezifiziert und beschrieben. Das Use-Case Diagramm unten gibt einen Überblick über die Anwendungsfälle der Basar Anwendung.


      Anschließend haben wir das Fachmodell werden der Anforderungsanalyse erfasst als UML Klassen Diagramm. Das Fachmodell beschreibt die fachlichen Klassen der Anwendung. Auf dem Modell operieren die erfassten Anwendungsfälle. Daher macht es Sinn das Modell aus dem Use-Case Diagramm abzuleiten. Das Klassen Diagramm unten gibt einen Überblick über die Klassen des Fachmodell der Basar Anwendung (Attribute sind im Modell nicht dargestellt).


      Im Rahmen der Spezifikation der Anwendungsbausteine im Systementwurf in der Bausteinsicht haben wir die Methode Domain Driven Design kennengelernt zur Spezifikation der Geschäftlogik einer Fachanwendung als Domain Modell. Die Methode Domain Driven Design beschrieben von Eric Evans im Buch "Domain Driven Design – Trackling Complexity in Heart of Software" beschriebt die folgenden Model Element Typen.

      Entities


      "Many objects are not fundamentally defined by their attributes, but rather by a thread of continuity and identity" – Eric Evans. Eine Klasse vom Typ Entity beschreibt also ein Objekt das eine Identität hat z.B. Kunden.

      Value Objects


      "Many objects have no conceptual identity. These objects describe some characteristic of a thing" – Eric Evans. Ein Klasse vom Typ Value Object beschreibt ein Objekt das keine Identität hat. Also ein Objekt das kein eindeutigen technischen oder fachlichen Schlüssel besetzt der die Objektidentität beschreibt. Vielmehr beschreibt der Wert der Attribute bzw. Attribut die Identität des Objekts. Beispiel ein Objekt vom Typ Farbe ist dann gleich (hat die selbe Objektidentität) wenn es die gleichen RGB Werte z.B. für Schwarz hat.

      Services

      "Sometimes, it just isn’t a thing." – Eric Evans. Klassen vom Typ Service beinhalten operation die nicht direkt einer Klassen vom Typ Value Object oder Entity zugeordnet werden können.

      Repositories

      Klassen vom Typ Repository beinhalten Methoden zum speichern, laden und suchen von Enties oder Value Objects aus einer Datenquelle z.B. Datenbank oder Dateisystem.

      Factories

      Klassen vom Typ Factory dien dazu Objekte zu erzeugen und eine Trennung von Schnittstellen und Konkreten Implementierung zu ermöglichen. D.h. eine Service Klasse sollte natürlich nicht abhängig von der Implementierung der Repositories Klassen sein.

      Domain Driven Design Beispiel

      Nach dem wir einige der Grundbegriffe des Domain Driven Design beschrieben haben, sehen Sie unten ein Klassendiagramm für das Domain Modell der Basar Anwendung erstellt nach den Ideen des Domain Driven Design.



      Da wir etwas in Verzug mit dem Stoff der Vorlesung sind, werden wir in der nächsten Vorlesung "Build Prozesse und Configuration Management" am 12.11.2010 das Thema Systementwurf und Domain Driven Design nochmals wiederholen und vertiefen.


      Literatur:
      • Domain-Driven Design - Eric J. Evans 2003 
      Links: