Seite wählen

NETWAYS Blog

MVC – Was ist das und wofür wird es benutzt

Im Rahmen der letzten Azubi-Schulung haben wir das Konzept des Model-View-Controller (MVC) behandelt. MVC ist ein bewährtes architektonisches Muster, das robuste, skalierbare und wartbare Anwendungen ermöglicht. In diesem Beitrag möchte ich das gewonnene Wissen mit Euch teilen und zeigen, wie MVC zur Entwicklung erstklassiger Softwarelösungen genutzt werden kann.

 

Das Model…

… bildet die Daten und Logik einer Anwendung ab. Es ist unabhängig von der Benutzeroberfläche und enthält Methoden zur Datenmanipulation und -abfrage. Dadurch können Entwickler sich auf die Implementierung von Funktionen und Algorithmen konzentrieren, ohne sich um Darstellung oder Benutzerinteraktion sorgen zu müssen.

 

Der View…

… ist für die Darstellung der Daten und die Benutzeroberfläche zuständig. Er bleibt passiv und enthält keine Logik, was eine einfache Wartung und Änderung der Benutzeroberfläche ermöglicht. Der View sollte flexibel sein und verschiedene Darstellungen der Daten liefern, um die Benutzerfreundlichkeit zu verbessern.

 

Der Controller…

… handhabt Benutzereingaben und steuert die Interaktion zwischen Model und View. Er validiert Eingaben, führt Aktionen auf dem Model aus und koordiniert die Aktualisierung des Views. Der Controller bleibt schlank und enthält keine Geschäftslogik, um die Verantwortlichkeiten klar zu trennen.

 

Vorteile der Anwendung von MVC

Durch die klare Trennung der Komponenten können Entwickler sich auf spezifische Aufgaben konzentrieren, was die Zusammenarbeit in Teams erleichtert. Zudem ermöglicht die Wiederverwendbarkeit des Models in verschiedenen Anwendungen eine effiziente Entwicklung und Skalierbarkeit.

MVC erleichtert auch die Testbarkeit der Anwendung, da das Model unabhängig von der Benutzeroberfläche ist. Unittests und Integrationstests können für die Geschäftslogik des Models geschrieben werden, was zu umfassender Testabdeckung und besserer Qualitätssicherung führt.

Die saubere Code-Struktur von MVC erleichtert die Wartbarkeit der Anwendung. Änderungen an der Benutzeroberfläche haben keine Auswirkungen auf das Model oder die Geschäftslogik, was die Risiken von Fehlern reduziert und den Entwicklungsprozess beschleunigt.

Das MVC-Konzept ermöglicht die Entwicklung einer intuitiven Benutzeroberfläche, da die Benutzeroberflächen-Logik klar vom Model und der Geschäftslogik getrennt ist. Dadurch kann die Benutzeroberfläche an die Bedürfnisse der Benutzer angepasst und die Benutzerfreundlichkeit verbessert werden.

 

Fazit

Das Model-View-Controller (MVC)-Konzept bietet Entwicklern zahlreiche Vorteile. Die klare Trennung von Model, View und Controller erleichtert die Zusammenarbeit, fördert die Wiederverwendbarkeit von Code und ermöglicht eine skalierbare und wartbare Softwareentwicklung. Durch die Anwendung von MVC kannst Du effiziente und erstklassige Softwarelösungen entwickeln!

Jan Schuppik
Jan Schuppik
Junior Developer

Jan wurde von seiner Selbstfindungsphase durch ein paar Studiengänge und eine Nebentätigkeit in der Gastronomie geführt, wodurch er letztendlich in der IT gelandet ist und unterstützt jetzt seit 2022 das Icinga-Team als Auszubildender. In seiner Freizeit beschäftigt er sich am liebsten mit kreativen Tätigkeiten, von Designen und Zeichnen, über Handwerkliches bis hin zur Musik, wozu er auch gern selbst eine Klampfe oder ein Mikro in die Hand nimmt.

Sommer, Sonne, Software – Rückblick CIVO NAVIGATE 2023

Anfang Februar durfte ich nach Tampa, Florida reisen, um auf der IT-Konferenz Civo Navigate zu sprechen, die in diesem Rahmen zum ersten Mal stattfand. Mit Beiträgen rund um Kubernetes, Edge Computing, Machine Learning, DevOps, GitOps, Observability, Security und Cloud Native Transformation war das Angebot an Themen breit gefächert. Sicherlich vor allem aus diesem Grund (und nicht nur wegen Temperaturen bis zu 30 Grad und toller Location) fanden sich zusätzlich zu 50 angekündigten Speakern, u. a. von ARM, GitLab, oder SUSE auch ca. 300-350 Teilnehmer vom 7.-8. Februar in Tampa ein.

Eingeleitet wurde die Konferenz durch einen Keynote-Block auf der Main Stage, wo nach einem Grußwort von Civo’s CEO Mark Boost ein ca. einstündiger Schwenk aus Steve Wozniak’s Leben folgte für viele Besucher bereits das erste Highlight. Im Anschluss ging es dann los mit den verschiedenen Beiträgen, vorgetragen auf drei separaten Tracks – zwei für klassische Talks und einer für praxisbezogenere Workshops. Für mich hieß es direkt ‚Showtime!‘, ich hatte den ersten Slot auf dem Workshop-Track erwischt, wo ich eine einstündige Einführung in Acorn gab.

Kubernetes-Deployments einfacher gestalten!

Acorn ist ein Tool in erster Linie für Entwickler, die ihre Anwendungen in ihre Kubernetes-Cluster deployen möchten, ohne direkt allzu tief in Kubernetes als Framework einsteigen zu wollen. Mein Kollege Markus hatte Acorn vor Kurzem bereits in seinem Blogpost über Application Management in Kubernetes erwähnt, und ich hatte nun die Gelegenheit, einem interessierten Publikum von ca. 20 Teilnehmern die Software näher zu bringen. Ziel des Workshops war es, eine Gästebuch-Anwendung von einem Docker-basierten Deployment mithilfe von Acorn auf Kubernetes umzustellen. Die Folien zu meinem Workshop finden sich unter slides.dbokdy.me, und in Kombination mit den Workshop-Unterlagen auf GitHub könnt ihr den Workshop bei Interesse auch daheim durchgehen. 😉

Auf den erfolgreichen Workshop folgte analog zu Markus‘ Blogartikel eine angeregte Diskussion, welche Tools für Application/Deploy Management auf Kubernetes denn nun am geeignetsten seien. Darauf gibt es natürlich keine eindeutige Antwort, geschweige denn eine Patentlösung, aber im Laufe der Gespräche wurden immer wieder Epinio, entwickelt von SUSE, und Namespace von Namespace Labs genannt – zu Epinio gab es am Folgetag sogar einen weiteren Workshop. Persönlich habe ich mir bisher keine der beiden Lösungen angeschaut, werde das aber nun schleunigst nachholen, und wer weiß, evtl. folgt ja demnächst ein weiterer Blogpost. Die Nachfrage nach Möglichkeiten, Kubernetes und seine Bedienung für den alltäglichen Gebrauch zu abstrahieren, ist auf Entwicklerseite allem Anschein nach auf jeden Fall vorhanden.

GitOps, Security und KI

Im Anschluss hatte ich jedenfalls gut lachen – zwei Stunden nach Konferenzbeginn war ich bereits „nur noch Teilnehmer“ und konnte nach Lust und Laune verschiedene andere Talks besuchen, mich mit interessierten Teilnehmern unterhalten und die sommerlichen Temperaturen von bis zu 30 Grad genießen. Für mich war interessant zu sehen, in welche Schwerpunkte sich der Großteil der Beiträge würde einordnen lassen, und für mich stachen dabei zwei Dinge heraus – GitOps und Absicherung von Kubernetes-Clustern. Zu diesen Themen gab es einige interessante Talks, angefangen bei Best Practice Sammlungen zu GitOps und Tools, die eine Kombination von GitOps und ClickOps ermöglichen, bis hin zum Einsatz von Service Meshes in Kubernetes zur Absicherung von Netzwerkverkehr in Kubernetes-Clustern.

Auch ein sehr interessanter Beitrag über das Hacken von Kubernetes-Clustern war im Programm enthalten, sodass man sich dem Thema „Sicherheit“ auch einmal aus Sicht des Angreifers widmen konnte. Doch auch andere Themen fanden Beachtung – so gab es nicht nur einige Beiträge zu den Themen ML/AI auf Kubernetes und Edge Computing, der Veranstalter Civo stellte im Rahmen seiner Konferenz auch neue Produkte in diesen Bereichen vor, was beispielhaft für die momentanen Trends rund um „Cloud Native“ und Kubernetes gesehen werden kann.

See you later, alligator!

Größter Pluspunkt der Konferenz als Ganzes waren für mich definitiv die Workshops, die durchgängig im Ablauf zu finden waren – so konnte man seinen persönlichen Talk-Marathon über 48 Stunden zwischendurch immer mal wieder mit praktischeren Fingerübungen und Case Studies auflockern und nebenbei noch sein bestehendes Wissen zu bestimmten Tools aufbessern oder komplett neu erwerben. Das nächste Mal stattfinden wird Civo Navigate im September 2023 in London, und wer weiß, evtl. werde ich euch auch dann wieder von meinem Beitrag und der Konferenz allgemein berichten dürfen.

Daniel Bodky
Daniel Bodky
Platform Advocate

Daniel kam nach Abschluss seines Studiums im Oktober 2021 zu NETWAYS und beriet zwei Jahre lang Kunden zu den Themen Icinga2 und Kubernetes, bevor es ihn weiter zu Managed Services zog. Seitdem redet und schreibt er viel über cloud-native Technologien und ihre spannenden Anwendungsfälle und gibt sein Bestes, um Neues und Interessantes rund um Kubernetes zu vermitteln. Nebenher schreibt er in seiner Freizeit kleinere Tools für verschiedenste Einsatzgebiete, nimmt öfters mal ein Buch in die Hand oder widmet sich seinem viel zu großen Berg Lego. In der wärmeren Jahreszeit findet man ihn außerdem oft auf dem Fahrrad oder beim Wandern.

Neues zum go-check

Lang ist es her, dass ein Blogpost über das hauseigene NETWAYS go-check geschrieben wurde. Seitdem hat sich das go-check immer weiterentwickelt und wurde mit vielen verschiedenen Funktionen erweitert, sodass die Pluginentwicklung noch einfacher von der Hand geht.

Um einen kurzen Umriss zu geben, bei dem go-check handelt es sich um GO Package, mit dem es möglich ist, schnell und einfach, Icinga Plugins zu entwickeln.

Ein Beispiel dafür wäre das Evaluieren von Thresholds und anschließendem Anhängen von Performance data im richtigen Format:

package main

import (
	"github.com/NETWAYS/go-check"
	"github.com/NETWAYS/go-check/perfdata"
)

func main() {
	config := check.NewConfig()
	config.Name = "check_new"
	config.Readme = `example Plugin Readme`
	config.Version = "1.0.0"

	return_code := check.Unknown

	plugin_output := ""

	crit_thresh := config.FlagSet.StringP("crit-example", "c", "20", "Critical threshold")

	warn_thresh := config.FlagSet.StringP("warn-example", "w", "10", "Warning threshold")

	example_val := config.FlagSet.Float64("example-val", 0.0, "Example value")

	config.ParseArguments()

	crit, err := check.ParseThreshold(*crit_thresh)
	if err != nil {
		check.ExitError(err)
	}

	warn, err := check.ParseThreshold(*warn_thresh)
	if err != nil {
		check.ExitError(err)
	}

	if crit.DoesViolate(*example_val) {
		return_code = check.Critical
		plugin_output = "Value is critical!"
	} else if warn.DoesViolate(*example_val) {
		return_code = check.Warning
		plugin_output = "Value is warning!"
	} else {
		return_code = check.OK
		plugin_output = "Everything is fine"
	}

	p := perfdata.PerfdataList{{
		Label: "example_label",
		Value: *example_val,
		Warn:  warn,
		Crit:  crit,
		Uom:   "Mb",
	}}

	example_perf := perfdata.Perfdata{
		Label: "another_perfdata",
		Value: 1.0,
		Warn:  &check.Threshold{Upper: 50.0},
		Crit:  &check.Threshold{Upper: 100.0},
	}

	p.Add(&example_perf)

	check.ExitRaw(return_code, plugin_output, "|", p.String())
}

Nach dem Kompilieren des Programms können beispielhaft Parameter mitgegeben werden:

go build -o check_test main.go

./check_test -c 20 -w 9 --example-val 10
WARNING - Value is warning! | example_label=10Mb;9;20 another_perfdata=1;50;100

Darüber hinaus gibt es folgende weitere Funktionen:

  • Konvertierung von IEC zu SI Einheit
  • Performance data in Human-readable Format
  • Http-Mock, welcher http-requests und results „dokumentiert“ und in XML speichert
  • Evaluierung des „schlechtesten“ Ergebnisses (Value) in einem Array

Somit bietet go-check ein schnelles und komfortables Package für die Entwicklung eines Icinga 2 Check Plugins. Für weitere Releases und Aktualisierungen, einfach bei dem offiziellen NETWAYS Organisation vorbei schauen.

Warum Python?

Als Systemintegrator in der IT-Welt stellt man früher oder später fest, dass man das Verstehen und Schreiben von Programmiersprachen nicht ignorieren kann. Je nachdem, in welcher IT-Bereich man tätig ist, wird man mit Programmiersprachen konfrontiert.

Wir bei NETWAYS bieten Open Source Lösungen, etwa in den Bereichen Monitoring, Cloud, Log-Management und Schulungen zu diesen Themen und Tools. Unter anderem etwa Lösungen für Automation, wo wir uns hauptsächlich mit Puppet und Ansible als Automation-Tools beschäftigen. Nachdem ich in letzter Zeit bei einigen Automation-Projekten dabei war, habe ich mich also mehr mit Ansible auseinander gesetzt. Ansible ist eine Automatisierungswerkzeug zur Orchestrierung, sowie der allgemeinen Konfiguration und Administration von Computern. Ansible ist Open Source und in Python geschrieben. Dabei bin ich immer wieder in Zusammenhang mit den Ansible-Modulen oder spezifischen Ansibel-Rollen für unsere Kunden auf Python gestoßen. In diesem Blog befassen wir uns mit der Definition und mit Vor- und Nachteilen von Python als Programmiersprache.

Was ist Python?

Programmiersprachen haben eine hohe Vielfalt und jede hat ihre eigenen Verwendungen und Vor- und Nachteile. Eine der objektorientierten Sprachen, die viele Anwendungen hat, ist Python. Python wurde im Jahr 1991 entworfen und veröffentlicht. Python ist Open Source und einfach zu lernen und damit geeignet für den Einsieg in die Welt des Programmierens. Python kann in vielen verschiedenen Bereichen wie Website Design, Softwareentwicklung und Skripting eingesetzt werden. Außerdem können die in Python geschriebenen Codes in einer Vielzahl von Plattformen wie Linux, Windows, Mac, sogar in Mobiltelefonen usw. implementiert werden.

Vorteile

Bedienung

Python ist aufgrund der Nähe zur menschlichen Sprache eine der am einfachsten zu erlernenden Sprachen, insbesondere für Anfänger. Im Vergleich zu Java und C können dieselben Funktionen in weniger Zeilen ausgeführt werden.

Libraries

Python verfügt über viele Standardbibliotheken in verschiedenen Bereichen wie das Internet, Webservice-Tools, Betriebssystemschnittstellen und Protokolle. Die am häufigsten verwendeten Programmieraufgaben werden in Python geschrieben, um die Anzahl der Codezeilen zu reduzieren, die zum Schreiben eines Programms erforderlich sind.

Integration

Python integriert „Application Integration“ und verbessert somit die Entwicklung von Webdiensten durch den Aufruf von COM- oder COBRA-Komponenten. Python verfügt über leistungsstarke Steuerungsmöglichkeiten, da sie direkt von C++, C oder Java mit Jython aufgerufen werden kann. Python kann auch XML und andere „Markup Languages“ verarbeiten, um auf modernen Betriebssystemen über ähnlichen Bytecode ausgeführt zu werden.

Flexibilität

Python ist sehr flexibel und erlaubt dem Benutzer daher, neue Dinge auszuprobieren. Python hindert den Benutzer nicht daran, etwas anderes auszuprobieren. Andere Programmiersprachen bieten diese Art von Flexibilität und Freiheit nicht und daher ist Python in diesen Fällen eher vorzuziehen.

Nachteile

Geschwindigkeit

Python ist eine interpretierte Sprache und übersetzt daher den Code Zeile für Zeile. Dadurch ist seine Verarbeitungsgeschwindigkeit niedriger als die einiger anderer Sprachen.

Mobilgeräte

Laut vielen Programmierern ist Python keine geeignete Sprache, um in der mobilen Umgebung ausgeführt zu werden. Außerdem erkennen Android und iOS Python nicht, Python kann jedoch im mobilen Umfeld verwendet werden. Dies erfordert jedoch mehr Zeit und diverse Einstellungen.

Speicherverbrauch

Python hat einen sehr hohen Speicherverbrauch. Dies liegt daran, dass es hinsichtlich Datentypen flexibel ist und viel Speicher verwendet. Python ist keine gute Wahl für speicheroptimierte Aufgaben.

Zusammenfassung

Heutzutage gibt es viele Programmiersprachen in der IT-Welt, die auch rege verwendet werden. Jede dieser Sprachen ist in einem bestimmten Bereich stärker als in anderen. Die Wahl der richtigen Programmiersprache beschäftigt viele, die planen in die Welt des Programmierens einzusteigen.

Die Entscheidung, welche Sprache man lernen soll, hängt von der Anwendung ab und persönlichen Interessen.
Python wurde entwickelt, um Produktivität, Lesbarkeit und Benutzerfreundlichkeit zu betonen. Aus meiner persönlichen Erfahrung als Anfänger kann ich sagen, dass es großen Spaß macht, Codes in Python zu schreiben, da die Lernkurve ab einem gewissen Punkt steil nach oben geht. Falls Du es ebenfalls neu lernen und Dich in Python ausprobieren willst, wünsche ich Dir viel Spaß dabei!

Falls Du es bei NETWAYS lernen oder anwenden magst, dann schau Dir doch mal unsere offenen Jobs und Ausbildungsstellen an!

Saeid Hassan-Abadi
Saeid Hassan-Abadi
Systems Engineer

Saeid hat im Juli 2022 seine Ausbildung als Fachinformatiker für Systemintegration bei uns abgeschloßen, und arbeitet nun in Operation-Team. Der gebürtige Perser hat in seinem Heimatland Iran Wirtschaftsindustrie-Ingenieurwesen studiert. Er arbeitet leidenschaftlich gerne am Computer und eignet sich gerne neues Wissen an. Seine Hobbys sind Musik hören, Sport treiben und mit seinen Freunden Zeit verbringen.

Kleine Weihnachtspyramide mit Raspberry Pi

Noch einmal schlafen und dann ist Weihnachten. Passend dazu haben wir von NETWAYS ein kleines Experiment zum selber Nachbauen vorbereitet.

Es handelt sich um eine kleine Weihnachtspyramide, die sich mithilfe von Python Code und ein paar Bauteilen ein wenig bewegt und außerdem noch schön leuchtet. Fast wie ein kleiner Weihnachtsbaum für jeden IT-Begeisterten da draußen.

 

Das braucht Ihr

Bevor wir starten, benötigen wir ein paar Dinge. Zum einen brauchen wir einen Raspberry-Pi mit Raspberry-PI OS. Das Modell spielt hierbei keine Rolle. Außerdem werden drei farbige LEDs, ein Steckbrett, ein kleiner Servo-Motor, ein Taster, sowie zehn GPIO-Verbindungskabel benötigt.

 

Und so funktioniert’s

Wie Ihr das Ganze verbinden müsst, seht Ihr in der Abbildung unten:

Ganz wichtig: Ihr müsst in der Raspberry Pi Konfiguration unter Schnittstellen noch den GPIO-Fernzugriff erlauben!

Der Programmcode lässt die Pyramide nach links und rechts drehen und die LEDs leuchten.

„#!/usr/bin/python
import RPi.GPIO as GPIO
import time

LED = [[17, 22, 10],[10, 22, 17]]
x = 0
t1 = 8
servoPIN = 21

GPIO.setmode(GPIO.BCM)
GPIO.setup(t1, GPIO.IN, GPIO.PUD_DOWN)
GPIO.setup(servoPIN, GPIO.OUT)

pwm = 2.5
a = 2.5
p = GPIO.PWM(servoPIN, 50)
p.start(pwm)

for i in LED[0]:
GPIO.setup(i, GPIO.OUT)

try:
while True:
p.ChangeDutyCycle(pwm)
pwm += a
if pwm==12.5 or pwm==2.5:
a = -a
time.sleep(0.2)
p.ChangeDutyCycle(0)
for i in LED[x]:
GPIO.output(i, True)
time.sleep(0.2)
GPIO.output(i, False)
if GPIO.input(t1) == True:
x = 1-x

except KeyboardInterrupt:
p.stop()
GPIO.cleanup()“

 

Wie Ihr Eure Pyramide, die auf den Servomotor gesetzt wird, gestaltet, ist Euch selbst überlassen.

Wie das ganze aussehen könnte, seht Ihr hier:

Viel Spaß beim Ausprobieren und fröhliche Weihnachten!

Wenn Ihr wissen wollt, wie wir bei NETWAYS unsere Weihachtsfeier gefeiert haben, lest Euch doch unseren Blogpost zur Weihnachtsfeier durch.

Christoph Breit
Christoph Breit
Junior Consultant

Christoph ist seit Juli 2022 Teil der NETWAYS Professional Services Abteilung. Er absolvierte hier zunächst ein Praktikum und unterstützt sein Team ab September als auszubildender Fachinformatiker für Systemintegration. In seiner Freizeit bereist er gerne die Welt, ist als Basketballer sportlich unterwegs und sitzt auch mal gerne sowohl beim Zocken als auch beim Graphic- & Motion-Designen vorm PC.