Slides from my workshop about software architectures for .NET Core applications at BASTA! Spring 2018 conference. We talk about architectures for enterprise mobile apps with Xamarin.Forms and ASP.NET Web Apps. Then we went hands-on and developed a CRM system called BASTAdynamics. :) One #microservice per desk, #containerized with #Docker, published to #Azure registry, deployed as Azure web apps. We have #aspnet #angular, #razor, #UWP & #Xamarin.Forms clients. #IdentityServer & @AzureCosmosDB in the backend. AND: We had a lot of fun! :)
36. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
.NET STANDARD
Was ist .NET Standard?
API-Spezifikation
Enthält die Definitionen von APIs, aber
keine Implementierungen
Folgeversion enthält alle APIs der
vorherigen Version
Analogie: .NET Standard ist ein Interface,
.NET Core, Mono, .NET Framework etc. sind
Implementierungen
Library wird gegen das “Interface”
kompiliert, und kann dann auf allen
Plattformen verwendet werden, die das
Interface implementieren
NuGet:
https://www.nuget.org/packages/NETStand
ard.Library/
37. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
.NET STANDARD PLATFORM SUPPORT
.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0
Universal Windows Platform 10.0 10.0 10.0 10.0 10.0 10.0.16299 10.0.16299 10.0.16299
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0
Spalten repräsentieren die .NET
Standard-Versionen. Header verlinken
zur Dokumentation der jeweils
hinzugefügten APIs.
Zeilen zeigen an, welche Version von
einer gegebenen .NET-Plattform eine
gegebene .NET Standard-Version
erfüllt/implementiert.
Fetter Text zeigt an, seit wann eine .NET-
Plattform eine gegebene .NET Standard-
Version erfüllt/implementiert.
Das Versionsmapping reflektiert den Stand zur Veröffentlichung von des .NET Standard 2.0 Toolings.
Quelle: https://github.com/dotnet/standard/blob/master/docs/versions.md
38. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
ENTSCHEIDUNGSHILFE
Ich benötige für meine Library viele verschiedene APIs:
Wähle höhere .NET Standard-Version!
Library kann auf weniger Plattformen eingesetzt/benutzt werden.
Ich möchte meine Library auf möglichst vielen Plattformen
benutzen:
Wähle niedrigere .NET Standard-Version!
Es stehen weniger APIs zur Verfügung.
39. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
.NET STANDARD VS. PCL PROFILES
.NET Standard ist kompatibel mit PCLs
(.NET Standard Libraries können PCLs
referenzieren, und andersherum)
Mapping zwischen PCL-Profile und .NET
Standard-Version in Tabelle abzulesen
Beispiel: Zielt existierende PCL auf .NET
Framework 4.5.1 und Windows 8.1 ab,
dann verwendet die PCL das Profil 44
Library kann dann zu .NET Standard 1.2
konvertiert werden
Das Versionsmapping reflektiert den Stand zur Veröffentlichung von des .NET Standard 2.0 Toolings.
Quelle: https://github.com/dotnet/standard/blob/master/docs/versions.md
PCL Profile .NET Standard PCL Platforms
7 1.1 .NET Framework 4.5, Windows 8
31 1.0 Windows 8.1, Windows Phone Silverlight 8.1
32 1.2 Windows 8.1, Windows Phone 8.1
44 1.2 .NET Framework 4.5.1, Windows 8.1
49 1.0 .NET Framework 4.5, Windows Phone Silverlight 8
78 1.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
84 1.0 Windows Phone 8.1, Windows Phone Silverlight 8.1
111 1.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1
151 1.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
157 1.0
Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight
8.1
259 1.0
.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows
Phone Silverlight 8
49. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
ENTERPRISE MOBILE APP
Wie saubere Trennung zwischen UI-Controls und deren Logik?
Einsatz Dependency Injection Container?
Wie kommunizieren lose gekoppelte Objekte/Komponenten?
Seitennavigation und Ort der Implementierung?
Wie Benutzereingaben validieren und Feedback geben?
Wie Schutz von Resourcen durch Authentifizierung & Authorisierung?
Sicherheit
Wie verteilte Daten zuverlässig empfangen (und cachen)?
Wie Unit Testing?
Zu lösende Aufgaben:
51. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
ASP.NET CORE WEB APP
Clean/Onion-Architektur ist altbekannt:
früher hexagonale Architektur, später
Ports & Adapter Pattern genannt…
Applikationsmodell ist Zentrum der
Anwendung
saubere Trennung von UI, BL und vor
allem Infrastrukturcode
Durch IoC bzw. DI ist Infrastrukturcode
abhängig von Anwendungskern
Clean Architecture
(Onion-View)
54. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
MICROSERVICES & CONTAINER
Business Logic A
Technologiestack XY
Business Logic B
Technologiestack YZ
Business Logic C
Technologiestack ZA
Business Logic D
Technologiestack YA
Business Logic A
Technologiestack XY
Business Logic B
Technologiestack YZ
Business Logic A
Technologiestack XY
Business Logic B
Technologiestack YZ
Business Logic A
Technologiestack XY
Business Logic B
Technologiestack YZ
Event Bus
58. RobinSedlaczek
RobinSedlaczek.com
Robin.Sedlaczek@live.de
ZIELE
Anforderungen
CRM-System soll gebaut werden
Verschiedene Clients denkbar (Web hat Prio, dann Cross-Plattform App, dann UWP-App)
Benutzer muss sich authentifizieren (in Zukunft soll SSO möglich sein für alle unsere
Produkte)
Benutzerverwaltung
Verwalten von Kunden (Anlegen, Anzeigen & Suchen, Bearbeiten, Löschen)
CRM => Wir müssen unbedingt ausfallsicher sein!
Als motiviertes Startup erwarten wir ein exorbitantes Wachstum
System muss entsprechend skalieren
Deployment muss einfach sein
59.
60. „Jetzt seid Ihr dran...“
RobinSedlaczek Robin.Sedlaczek@live.de RobinSedlaczek.com