Beruflich Dokumente
Kultur Dokumente
3 TIER ARCHITEKTUR
->Darstellungs- und Eingabeschicht (Client) -> Präsentationsschicht
->Applikationsschicht (Server) -> Logikschicht
->Daten (Datenbank) -> Datenschicht
Client will Infos -> frägt bei Service Layer an -> dieser frägt bei Business Logic Layer nach -> dieser
veranlasst Mapper auf die DB zuzugreifen -> DB gibt angefragte Objekte dann in die andere Richtung über
die Schichten zurück
Presentation Layer Interaktion mit dem Benutzer -> Verarbeitung von Nutzereingaben und
Anzeige von Informationen
Service Layer -> API Anfragen des Presentation Layer verarbeiten -> Ressourcen bereitstellen
Business Logic Layer Ausführung von Geschäftslogik und Verarbeitung von Daten
->Service Layer ruft Algorithmen des Business Layers auf, um Anfragen der Präsentationsschicht zu
verarbeiten
2
FRONTEND
->React Webseite (Node Server)
->alles, was der User sehen kann
->Darstellungs- und Eingabeschicht (Client)
->unkompiliert: Quellcode (Programmiersprache), dieser muss später in Maschinensprache übersetzt
werden, damit er ausgeführt werden kann
-unkompiliert = noch nicht von Compiler wie Babel übersetzt
Begriff Erklärung
Reconciliation Algorithmus -entscheidet, wie virtual DOM mit tatsächlichem DOM synchronisiert wird
-entscheidet, welche Änderungen am tatsächlichen DOM vorgenommen
werden müssen, damit der virtual DOM mit dem tatsächlichen übereinstimmt
XML Extensible Markup language -> von Mensch und Maschine lesbar
CORS - Cross Origin Resource Daten können von mehreren Servern geladen werden (Zugriff per HTTP-
Sharing Header)
Origin: Protokoll (https)
Anfragen auf verschiedene Server gleichzeitig z.b. wenn in einem Web
Dokument zwei Bilder von zwei unterschiedlichen Domains/web Servern
geladen werden sollen
Meist aus Sicherheitsgründen unterbunden
Props -Übergabe von Parametern an Klassen (vgl. HTML-Attribute) -> wird im
öffnenden Tag einer React Komponente übergeben
->Daten an Unterkomponenten (Child Component) übergeben
-ein JSX-Attribut/Child als einzelnes Objekt
->read-only: Klassen und Funktionen dürfen nie ihre eigenen props ändern!
4
Begriff Erklärung
Pure function =Funktionen, die nicht ihren input verändern, sondern ein Ergebnis
zurückgeben z.b sum of a and b: returns a+b
.then Gibt einen promise zurück -> Reihenfolge wie etwas ausgeführt werden soll
Promise Eventuelle Ausführung oder Fehlschlag einer Operation und der daraus
resultierenden Ergebnisse -> Rückgabewert
Zustände: pending, fulfilled, rejected
REST - representational state -Client Server Modell: Client im Frontend, Server im Backend ->
transfer Nutzerinterface von Datenhaltung getrennt
-Statuslos: keine Clientdaten auf dem Server
-Zwischenstatus: Clients können Antworten zwischenspeichern
-HTTP Methoden: create, read, update, delete -> Zugriff auf Daten
State Zusätzlich zur Erfassung von Eingabedaten (this.props) auch die Verwaltung
der Statusdaten (this.state) einer Komponente
->bei Änderung des State wird gerendertes Markup aktualisiert
->aktueller Stand der Anwendung (bezogen auf ein Objekt)
->sollte immer ein JavaScript Objekt sein
->enthält Daten, die spezifisch für eine Komponente sind und sich ändern
können
->nur Daten, die auch gerendert werden oder wichtig für den Datenfluss sind
->alles andere: kann als Variable definiert werden
ButtonClick State wird neu gesetzt
Eventhandler Was passieren soll, wenn ein Ereignis eintritt
->erkennen Events und führen eine vorbestimmte Aktion aus
->Verbindung Elemente aus Benutzeroberfläche und Code
Event Ausgelöst durch Interaktion des Anwenders
Markup (markup language) Auszeichnungssprache -> Maschinen können Textinhalte gliedern und
formatieren -> maschinenlesbare Sprache
Beispiel: HTML (hypertext markup language) -> beschreibende language da
sie Inhalt einer Seite vorgibt
onSuccess vs onFailure Wenn Methodenaufruf erfolgreich vs nicht erfolgreich war
->.then und .catch bei einer fetch Funktion
Verbindung Frontend zur DB -Mit Node.js: Zugriff über REST-Service -> Anfrage der Daten über eine URL
-Abfrage des Webservice: fetch(url).then(Rückgabe).then(Ergebnis
verarbeiten)
-Rückgabe: auf http-Route
-Verbindungsaufbau mit den Zugangsdaten
componentDidMount( ) -wird aufgerufen, sobald eine Komponente in das DOM eingefügt wurde
->wird nach Initialisierung der Komponente und ihrer Kinder aufgerufen
->kann verwendet werden, um asynchrone Anfragen zu starten
->Daten von einer API abfragen
->Daten von einem rempte Endpoint abfragen
setState( ) -Komponente und ihre Child Components müssen erneut gerendert werden mit
dem neuen state -> Update der Benutzeroberfläche als Antwort auf event
handlers
-mehr als Request zu verstehen (kein direkter Command)
-Komponente wird nicht direkt geupdatet, sondern evtl erst mit anderen zsm
->um Änderungen der states einer Komponente durchzuführen
Remote Procedure Call -Aufruf von Funktionen auf anderen Computern als das aufgerufene Programm
-> Interprozesskommunikation
-Client schickt Anfrage an Server (welche Funktion mit welchen Parametern)
-Server bearbeitet Anfrage und schickt Antwort
-Nach Empfang: Client kann Verarbeitung fortführen
Asynchroner RPC Client kann nach dem Versenden der Anfrage direkt weitere Operationen
ausführen -> muss nicht erst auf Antwort warten
Typescript ->Open Source Programmiersprache
->baut auf JS auf
->fügt statische Typisierung hinzu
->Fehler können während der Entwicklung entdeckt werden
Warum gibt es Typescript bei ->Python hat bereits eingebaute Unterstützung für Typisierung
Python nicht? Wie könnte man das ->für Variablen und Funktionen können Typen angegeben werden
realisieren?
7
Begriff Erklärung
package.json -Enthält alle Extensions, die für die App benötigt werden -> dort werden
Konfigurationen gemacht -> welche Abhängigkeiten (Dependencies) installiert
werden müssen
-enthält Metadaten über das Projekt
-Definition von npm Skripten -> können mit npm run ausgeführt werden
React Style Guidist Dokumentation von Source Code (im Frontend: Ordner Styleguide)
->Code nach Richtlinien formatieren
Zugriff von Frontend auf Backend Mit REST-Interface:
(Flask Server) 1. Sicherstellen, dass Server auf einem bestimmten Port auf Anfragen
wartet -> app.run(port=5000) -> startet den Server
2. Zugriff vom Frontend: fetch API -> http Anfragen an Server senden
Business Objects -dienen als APIs zwischen Client und Schnittstelle zu backend
-Geschäftslogik einer Anwendung: verarbeiten und manipulieren Daten
des Systems
-im Frontend: Daten anzeigen und bearbeiten -> Modelle der Daten
Static Methode fromJSON liefert ein Array, macht aus jedem JSON-Objekt aus einem Array ein
Business Object
->erstellt eine Instanz einer Klasse aus einem JSON-Objekt
API-Klasse im frontend liefert alle Business Objects sowie deren Attribute, enthält Backend
URLs (post = neu erzeugen, put = updaten) -> Frontend kommuniziert
mit HTTP Request mit dem Backend
API-Module im frontend Eigenständiges Module durch index.js
Component ->ähnlich wie eine JavaScript Methode
->akzeptiert beliebige Eingaben (props)
->gibt React Elemente zurück, die beschreiben, was auf dem Bildschirm
angezeigt werden soll
->besteht aus mehreren Elementen
Elemente in React =die kleinsten Bausteine in React
React in eine existierende Webseite React als <script> tag in einer HTML Seite einfügen
integrieren
Create a react app npx create-react-app my-app
cd my-app
npm start
widget -Steuerungselement/Schaltfläche in der Benutzeroberfläche
-kann Benutereingaben verarbeiten
-Formular, Menü, Textfeld
COMPONENT LIFECYCLE
Wenn eine Instanz einer Komponente erstellt wird und im DOM eingefügt wird
->Methoden werden in folgender Reihenfolge
aufgerufen:
-constructor( )
-render( )
-componentDidMount( )
8
Updating:
->eine Komponente wird erneut gerendert
1. render()
2. componentDidUpdate()
Unmounting:
->Komponente wird aus DOM entfernt
1. componentWillUnmount()
9
SERVICE LAYER
->sitzt auf einer API/ einem Framework (Flask RestX)
->Hilfsframework, das auf Flask sitzt
->gibt Website mit allen Schnittstellen
->Austausch mit Frontend: Json (wird vom Client mit JavaScript weiterverarbeitet)
->Verarbeitung von Geschäftslogik
->main.py, HdMatesAPI
Begriff Erklärung
URL - uniform resource locator -definiert Netzwerkstandort einer Ressource -> adressiert Ressource im
Backend
ressourcentyp://User:Passwort@host.domain:Prot/Pfad/DateiParameter
Begriff Erklärung
DATABASE
->Mapper.py (Superklasse): connection zur Datenbank (cursor)
->Mapper Klassen: Tupelwelt der DB mit der objektorientierten Welt verbinden
->aus Tupel sollen Objekte gemacht werden und umgekehrt
->MySQL python connector als Treiber
Begriff Erklärung
Mapper -tauscht Daten zwischen zwei Komponenten oder Schichten aus (ohne
=Context Manager dass diese sich kennen)
-wandelt Daten aus DB in Objekte um (von persistent=längerfristig
gespeichert zu transistent=temporäre Daten)
->Objekte können dann in der Applikationsschicht weiterverwendet
werden
Name Mapping Wie heißt das Objekt im Backend und wie soll es im Frontend heißen?
Context Manager -Ressourcen verwalten, die von einem bestimmten Codeblock verwendet
werden-> Ressourcen bereitstellen und nach Ende des Codeblocks
wieder freigeben
-With UserMapper( ) as mapper: return mapper.insert(user)
AbstractContextManager -implementiert Context Manager Entwurfsmuster in Python
-stellt selbst keine Ressourcen bereit
-definiert Methoden für Unterklassen, um Ressourcen bereitzustellen
13
Begriff Erklärung
-Stellt magic methods enter und exit bereit, um DB-Verbindung
herzustellen bzw zu schließen -> diese müssen aber in den Unterklassen
implementiert werden
ABC =abstract base class
-Modul in Pyhton, mit dem man Abstrakte Basisklassen definieren kann -
> definieren Methoden aber implementieren sie nicht
-kann nicht dirket instanziiert werden -> Vorlage für Unterklassen
abstractmethod -markiert Methoden einer Abstraken Basisklasse
->wenn sie von Unterklasse nicht implementiert wird: TypeError
ContextErrorMessage Fehlermeldung, wenn beim Verwenden eines Context Managers ein
Fehler auftritt
IndexError -wenn versucht wird auf ein Element in einer Sammlung (z.b. Array)
zuzugreifen, das nicht vorhanden ist
-Bei Zugriff auf ein Tuple wenn kein tuple zurückgegeben wurde
sondern eine leere Sequenz
Autoinkrement Tupel nicht selbst setzen, DB macht das automatisch zb bei id
automatisch hochzählen
->Spalte in der DB als auto_increment definieren
Verbindung App Schicht zur DB-Schicht -mit node.js: Zugriff über REST-Service
-Anfrage der Daten über eine URL
-Abfrage des Webservice mit
fetch.(url).then(Rückgabe).then(Ergebnis verarbeiten)
-Rückgabe auf HTTP-Route
-Verbindungsaufbau: mit Zugangsdaten
->über SQL bzw MySQL connector und die Mapper
Relationale Datenstruktur ->Daten in Form von Tabellen abbilden, die miteinander verknüpft sind
-besteht aus mehreren Tabellen (Relationen), diese aus Zeilen (Tupel)
und Spalten (Attribute)
-Verknüpfungen durch Fremdschlüssel
MySQL Python Connector -Bibliothek
-ermöglicht: von Python aus auf eine MySQL DB zuzugreifen
->Schnittstelle zwischen Python und MySQL Server
->import mysql.connector
Warum ist es wichtig cursor und -sonst bleibt Prozess auf dem Server aktiv und nimmt Ressourcen in
Verbindung am Ende zu schließen? Anspruch -> durch Schließen wird Prozess beendet und Ressourcen
freigegeben -> erst so werden Änderungen in der DB gespeichert
-Erstellen des Cursors beansprucht temporären Speicherplatz auf dem
Server (speichert Ergebnis der Abfrage) -> durch Schließen wird
Speicherbereich freigegeben
FetchAll( ) -Methode des curser-Objekts in der Python MySQL Bibliothek
->Backend (nicht zu verwechseln mit -ruft alle von einer SELECT Anweisung zurückgegebenen Zeilen ab
fetch() im Frontend) -cursor.fetchall()
Referentielle Integrität -Datensätze mit Fremdschlüssel können nur dann gespeichert werden,
wenn der Wert des Fremdschlüssels einmalig in der referenzierten
Tabelle existiert
-Löschung eines Datensatzes oder Änderung des Fremdschlüssels in
einem Datensatz ist nur möglich, wenn zu diesem keine abhängigen
Datensätze in Beziehung stehen
14
ALLGEMEINES
Begriff Erklärung
Proxy (vergleichbar mit Server) Kommunikationsschnittstelle: steht zwischen 2 Netzwerken (zb Client
und Server)
Von lat. Procurare = für jemanden handeln
Vermittler zwischen Client und Ziel-Server
Aufgaben: Filterung von Inhalten, Zugriffskontrolle, Caching, IP-
Adresse des Clients verbergen, Marshalling
Entität Eindeutig zu bestimmendes Objekt zb der Kunde Max Maier
Entitätstyp Gleichartige Entitäten zu einem Typ zusammengefasst -> Kunde
Klasse -Bauplan für ähnliche Objekte -> gleiche Ausprägungen und Merkmale
-beschreibt Struktur und Verhalten einer Menge gleichartiger Objekte
Init Methode Erzeugt beim Aufruf eine neue Instanz einer Klasse
Dundermethoden Enter und Exit für Ein- und Austritt aus der DB
-spezielle Methoden in Python
-beginnen und enden mit doppelten _ _
-führen Aktionen aus, wenn bestimmte Funktionen auf ein Objekt
angewendet werden
-init: wenn ein Objekt erstellt wird -> initialisiert Attribute
-str: gibt ein str eines Objektes zurück -> print() oder str()
-len: gibt die Länge eines Objektes zurück -> len()
Magic Method Muss nicht aufgerufen werden, wird ausgeführt, wenn Objekt einer
Klasse erzeugt wird
Staticmethod Kann ohne Instanziierung einer Klasse aufgerufen werden
->wenn ich eine Methode brauche aber noch kein Objekt existiert
->Aufruf: Klassenname.Methodenname( )
Modularisierung Gliederung eines Programms in einzelne Module
->Reduktion der Problemkomplexität
->Schaffung von Teilaufgaben
Serialisierung -Abbildung von strukturierten Daten auf eine sequenzielle
Synonym für Marshalling beim RPC Darstellungsform: Umwandlung des Zustands eines Objekts in eine
Folge von Bytes
-Speicherung von Objekten in Dateien
-Übertragung von Objekten über das Netzwerk
Dev Server Development Server -> Server der als Testumgebung zur Verfügung
steht
->z.b. node.js
Vorgehen bei der Entwicklung 1. Anforderungsanalyse (Use Case Diagramm)
2. Anforderungsspezifikation: Klassendiagramm
3. Entwurf: Architektur, Design, Schnittstellen, Interaktionen der
Komponenten
4. Implementierung: Coding
5. Testen
6. Wartung
Branch Persönlicher Arbeitsbereich: Arbeit unabhängig von anderen
Projektmitgliedern
Commit Snapshots/Meilensteine eines Projekts: werden ins lokale Repository
übertragen, später in remote Repos
Object.getPrototypeOf() greift auf Prototyp (anderes Objekt, von dem das aktuelle erbt) eines
Objektes zu
Object.setPrototypeOf(obj1, Ändert das prototype eines Objektes: obj1 soll Eigenschaften von obj2
obj2.prototype) haben
Array.isArray() Überprüft, ob ein Objekt ein Array ist oder nicht -> true/false
Unix socket Für Interprozess-Kommunikation
->Datenaustausch zwischen Prozessen, die auf demselben Host laufen
16
Begriff Erklärung
If (__name__ ==„__main__“) Wird true, wenn Datei gestartet wurde (und zwar nur genau dieses
Module, in dem der Code steht) -> Abfrage an das Module: was ist dein
Name? -> wenn es gestartet wurde ist der Name immer main!! (= main
ist der Name eines gestarteten Modules)
MODELLE
Klassendiagramm:
ER-Modell:
20
Sequenzdiagramm:
Aktivitätsdiagramm:
-dynamische Sicht
-Kontrollfluss in einem System anhand
von Aktivitäten
-Bedingungen in eckigen Klammern
-Verzweigung als schwarze Linie
-Fallunterscheidung: Raute
21
Kommunikationsdiagramm:
-dynamische Sichtweise
-Nummerierung der Reihenfolge
-Objekte: Knoten
-Nachrichten entlang der Kanten
22
Automatendiagramm:
-dynamische Sichtweise
-genau einer Klasse zugeordnet
-mögliche interne Zustände der
Objekte
Komponentendiagramm:
Verteilungsdiagramm:
-values: ein Array von Werten, die die Spaltenwerte der Zeile
darstellen
24
Code Beispiele
Form
25
Requests
GET-Request:
->JSON.stringify wandelt das JS-Objekt aus den geschweiften Klammern in einen JSON sting um
->response: Antwort der API als JSON
->response.json: gibt kein JSON zurück, sondern nimmt JSON als Input und parst es, um ein JS-
Objekt zu erstellen
->data: Antwort der API als JS
->error: Antwort der API, wenn ein Fehler auftritt
->header: gibt an, in welchem Format der Inhalt des bodys übergeben wird, hier: JSON (wichitg,
damit Server weiß, wie er den Inhalt interpretieren soll)
27
DELETE Request:
PUT Request:
Liste
29
Ressourcenaddressierung
Backend:
Frontend:
30
Flask
Singleton
-private Konstruktor: damit von außen keine Instanz erstellt werden kann -> nur die Klasse selbst
kann eine erstellen
-private Variable: von außen kann nicht auf die Instanz zugegriffen werden -> Verwaltung nur
innerhalb der Klasse möglich
31
Promise
Promise-Klasse
Security Decorator
32
Mapper
Superklasse Mapper
33
Find_all()
Insert()
34
Delete()
->kein return
Update()
->kein return
BO im Backend
35
BO im Frontend
fromJSON
->gibt ein Array von Konversationsobjekten zurück (umgewandelt aus einer JSON Struktur)
36
Hooks
Polymorphismus
->Methoden mit dem selben Namen können in unterschiedlichen Klassen oder auch in der selben
Klasse unterschiedlich implementiert werden
-statisch: Entscheidung, welche Methode verwendet wird beim Komplieren des Codes, Beispiel:
eine Klasse hat zwei Methoden mit dem selben Namen, diese übernehmen aber unterschiedliche
Parameter -> überladen von Methoden
-dynamisch: Entscheidung während der Laufzeit, Beispiel: eine Methode einer abstrakten Klasse
wird in Unterklassen unterschiedlich implementiert -> Polymorphismus durch Vererbung