SlideShare ist ein Scribd-Unternehmen logo
1 von 118
sogehtsoftware.de
Hendrik Lösch
Senior Consultant & Coach
Hendrik.Loesch@saxsys.de
@HerrLoesch
Hendrik-Loesch.de
Frank Kubis
Consultant
Frank.Kubis@saxsys.de
@FrankKubis
sogehtsoftware.de
HISTORIE
2012
Version 4.5
Task-Based
Async Model,
.NET APIs for
Store/UWP
Apps
2010
Version 4.0
CLR 4.0,
Parallel LINQ,
Task Parallel
Library
2007
Version 3.5
LINQ, Entity
Framework,
REST, AJAX
2003
Version 1.1
ASP.NET
Mobile
Controls,
Event und
Delegate2002
Version 1.0
ASP.NET,
ADO.NET,
WinForms,
Framework
Class Library,
CLR 1.0,
Web Services
2006
Version 3.0
WPF, WCF,
WF,
Card Space,
Lambda-
Expression
2005
Version 2.0
CLR 2.0,
Generics,
Anonyme
Function
STAND 2019
.NET STANDARD
Allgemeine Infrastruktur
Laufzeitkomponenten Compiler Sprachen
.NET FRAMEWORK
WPF
ASP.NET
WinForms
.NET CORE
UWP
ASP.NET Core
XAMARIN
iOS
OS X
Android
Quelle: https://devblogs.microsoft.com/dotnet/introducing-net-standard
.NET STANDARD
Wie .NET Standard funktioniert
DataInput.Models
class Project:
System.Object
System.Runtime.dll
System.Object
netstandard.dll
MainWindow.xaml
dll Referenz
.NET Core
Type Forwarding
Quelle: https://devblogs.microsoft.com/dotnet/introducing-net-standard
.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0 2.1
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 3.0
.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.11 4.6.11 4.6.11 N/A2
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4 6.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14 12.16
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8 5.16
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0 10.0
Unity 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 2018.1 TBD
Universal Windows
Platform
8.0 8.0 8.1 10.0 10.0 10.0.16299 10.0.16299 10.0.16299 TBD
.NET STANDARD VERSIONEN
Quelle: https://github.com/dotnet/standard/blob/master/docs/versions.md
DIE ZUKUNFT
DESKTOP
WPF
WinForms
UWP
WEB
ASP.NET
CLOUD
Azure
MOBILE
Xamarin
GAMING
Unity
IoT
ARM32
ARM64
AI
ML.NET
.NET für
Apache
Spark
.NET
INFRASTRUKTUR
Laufzeitkomponenten Compiler Sprachen
VISUAL STUDIO
VISUAL STUDIO FÜR MAC
VISUAL STUDIO CODE
COMMAND LINE INTERFACE
WERKZEUGE
Quelle: https://devblogs.microsoft.com/dotnet/introducing-net-standard
Juli 2019
.NET Core 3.0
RC
Sep 2019
.NET Core 3.0
GA
Nov 2019
.NET Core 3.1
LTS
Nov 2020
.NET 5.0
GA
Nov 2021
.NET 6.0
LTS
Nov 2022
.NET 7.0
GA
Nov 2023
.NET 8.0
LTS
VON .NET CLASSIC ZU .NET 5 UND FOLGEND
Quelle: https://devblogs.microsoft.com/dotnet/introducing-net-standard
.NET CORE 3.0
Quelle: https://channel9.msdn.com/Series/Desktop-and-NET-Core-101/NET-Core-and-NET-Framework-what-to-choose
Blazor Server
• Alle Interaktionen
werden auf dem Server
behandelt
Blazor WebAssembly
• Web App die
clientseitig ausgeführt
wird
• Kann offline arbeiten
Blazor PWA
• Erscheint als native
Anwendung (Windows)
• Kann offline oder
online benutzen
Blazor Hybrid
• Native .NET rendert zu
Electron / WebView
• Erscheint als native
Anwendung (Windows)
• Kann offline oder
online benutzen
Blazer Native
• Gleiches
Programmiermodel,
aber in non-HTML UI
rendern
Blazor!
WAS KOMMT DANACH?
Web
Desktop
+ Mobile
Icon made by Eucalyp, Freepik from www.flaticon.comThe Future of Blazor on the clientQuelle:
sogehtsoftware.de
PORTIERUNG
› Refactoring
› Kleinteilige Anpassung der Struktur ohne Verhaltensänderung
› Restrukturierung
› Großflächige Anpassung der Struktur ohne Verhaltensänderung
› Migration / Portierung
› Übertragung vorhandener Funktionalität oder Daten auf neue technische Basis
› Sanierung
› Versetzen des Systems in seinen ursprünglich geplanten bzw. einen verbesserten Zustand
DEFINITIONEN
BEISPIELSZENARIO
› Verwaltung von
› Veröffentlichungen
› Veröffentlichungsmedien
› Verlagen
› Projektvita
› Abhängigkeiten
› ADO.NET
› Entity Framework
› SQLite
› NLog
› Newtonsoft.Json
BEISPOIELSZENARIO
Schritt 0
Neuen Branch anlegen
Aktualisieren Analysieren Portieren Reparieren Validieren
Aktualisieren Analysieren Portieren Reparieren Validieren
UNNÖTIGE REFERENZEN ENTFERNEN
AKTUALISIEREN DER NUGET CONFIG
PACKAGES.CONFIG IN PACKAGEREFERENCE WANDELN
1
2
3
4 – Kompilieren!
5 – Testen!
6 – Einchecken!
PRÜFEN & AKTUALISIEREN EXTERNER ABHÄNGIGKEITEN
Reicht nicht
Perfekt
Man muss nicht zwangsläufig die neuste Version nehmen!!!
http://fuget.org
Selbst schreiben
PRÜFEN & AKTUALISIEREN EXTERNER ABHÄNGIGKEITEN
Riskant wenn es keine Unterstützung für .NET
Core gibt.Aktuelle Version
Neuere Version
Separates Paket
Alternative
Möglicherweise gibt es Änderungen an der API
oder dem Verhalten.
Aufwändige Konfiguration.
Möglicherweise breaking Changes.
Breaking Changes sind gewiss.
Aufwändige Anpassungen notwendig.
Ungeplante Umsetzungsaufwände.
Bei kleineren Werkzeugen aber durchaus eine Lösung.
AKTUALISIEREN AUF NEUE .NET VERSION
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, esten, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
TESTEN
Aktualisieren Analysieren Portieren Reparieren Validieren
PRÜFEN VERWENDETER APIS
PRÜFEN VERWENDETER APIS
PRÜFEN VERWENDETER APIS
Bestandteil Erscheinung
seit .NET Framework
Version
in .NET Core 3.0
verfügbar
Name in .NET
Core
Migration
möglich
Alternative
ASP.NET 2002 1.0 Ja ASP.NET Core normal
ASP.NET Web Froms 2002 1.0 Nein unmöglich Blazor
ADO.NET 2002 1.0 Ja** SqlClient normal
Windows Forms (WinForms) 2002 1.0 Ja* normal
Common Language Runtime
(CLR)
2002 1.0 Ja CoreCLR leicht
.NET Remoting 2002 1.0 Nein unmöglich
Event und Delegate 2003 1.1 Ja leicht
Generics 2005 2.0 Ja leicht
Anonyme Funktion 2005 2.0 Ja leicht
Windows Presentation
Foundation (WPF)
2006 3.0 Ja* normal
Windows Communication
Foundation (WCF)
2006 3.0 Ja** CoreWCF schwer Siehe nächste Foile
Windows Workflow
Foundation (WF)
2006 3.0 Ja** CoreWF schwer
Windows CardSpace 2006 3.0 Nein unmöglich
Lambda-Ausdruck 2006 3.0 Ja leicht
Language Integrated Query
(LINQ)
2007 3.5 Ja leicht
Microsoft Silverlight 2007 3.5 Nein unmöglich Blazor, Angular, VueJS
Entity Framework (EF) 2007 3.5 Ja EF Core schwer
Parallel LINQ (PLINQ) 2010 4.0 Ja leicht
Task Parallel Library (TPL) 2010 4.0 Ja leicht
Task-based Async Pattern
(TAP)
2012 4.5 Ja leicht
.NET APIs for Store/UWP Apps 2012 4.5 Ja leicht
*: nur auf Windows verwendbar
**: nicht vollständig kompatibel
WCF
Quelle: https://github.com/dotnet/wcf/issues/1200#issuecomment-356422289
Weitere Informationen https://www.ben-morris.com/why-isnt-wcf-supported-in-net-core/
Kriterium gRPC
Web API mit ASP.NET
Core
SignalR CoreWCF IPC Service Framework
Unterstützung für
komplexe
Anwendungen
einige WCF-Features
verfügbar
Sehr gut
einige WCF-
Features
realisierbar
wie WCF
Funktionsumfang
könnte zu gering sein
Performance sehr gut Sehr gut gut
(voraussichtlich) wie
WCF
k.a.
Migrationsaufwand
ähnliches Konzept wie
WCF, Funktionalität kann
weiter verwendet werden
Rewrite der
Vermittlungsschicht
Wrapper vorhanden,
allerdings anderes
Konzept
(voraussichtlich)
keiner oder minimal
Je nach Szenario gering
bis sehr hoch.
Kompatibilität eigenes NuGet-Paket
Komplett anderes
Vorgehen
ASP.NET-Core-
Feature
noch nicht für
Produktiveinsatz
geeignet
Ähnliches Vorgehen
anderer Ansatz
Sicherheit SSL/TLS SSL/TLS SSL/TLS (vermutlich) wie WCF SSL/TLS
Besonderheit Empfehlung von Microsoft
Clients und Server sind
unabhängig
Bidirektionale
Kommunikation
Ist möglicherweise am
nahest an WCF
Leichtgewichtig, gut für
kleinere Projekte
WCF - ALTERNATIVEN
Ab Januar 2020: https://github.com/saxsys/Vergleich-WCF-Alternativen
Aktualisieren Analysieren Portieren Reparieren Validieren
Neue Solution / neues Projekt anlegen und alle Quellen kopieren
• Bei kleinen Projekten die einfachste Lösung
• Bei großen Projekten fehleranfällig
Projektdateien ersetzen
• Harte Migration
• Kein XAML Designer
Projekt mit Multitarget
• Aktuell sehr fehleranfällig
Eigene Solution die die Quellen einbindet
• Beide Lösungen können auseinander laufen
• Aufwändiger Build
Mehrere Projektdateien mit eigenem Buildtarget in einer Solution
• Aufwändig zu warten
• Kann verwirrend sein
MIGRATION DER PROJEKTDATEIEN
Wahl der Qual
Neue
Projektdatei
anlegen
Wichtige
Bestandteile
übernehmen
Generate
AssemblyInfo
in Projekt
aufnehmen
Alte
Projektdatei
aus Solution
entfernen
Neue
Projektdatei
in Solution
einbinden
Package
Restore
ABLAUF DER MIGRATION
DOWNLOAD .NET CORE 3.0
NEUE PROJEKTDATEI ANLEGEN
› <RootNamespace>, <AssemblyName>, <ApplicationIcon>
› <Resource>-Elemente, ausgenommen *.resx-Dateien
› <None>-Objekte, welche in das Ausgabeverzeichnis kopiert
wurden
› Übernahme der PackageReference Item Group
› XAML-Dateien, die als Content statt als Page eingebunden
wurden
› StartupObject festlegen
KOPIEREN WICHTIGER BESTANDTEILE IN NEUE *.CSPROJ
DATEIEN
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
<RootNamespace>DataInputt</RootNamespace>
<AssemblyName>DataInputt</AssemblyName>
<StartupObject>DataInputt.App</StartupObject>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EntityFramework">
<Version>6.3.0</Version>
</PackageReference>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
<PackageReference Include="NLog">
<Version>4.6.8</Version>
</PackageReference>
<PackageReference Include="System.Data.SQLite">
<Version>1.0.112</Version>
</PackageReference>
<PackageReference Include="System.Data.SQLite.Core">
<Version>1.0.112</Version>
</PackageReference>
</ItemGroup>
</Project>
Neue Datei umbennen
Neue Datei kopieren
Alte Datei überschreiben
fertig
PROJEKT DATEI IN SOLUTION AUSTAUSCHEN
PACKAGE RESTORE & BUILD
Tritt direkt nach dem Start auf.
Aktualisieren Analysieren Portieren Reparieren Validieren
PROJEKTE AUSTAUSCHEN
BUILDERRORS BESEITIGEN
BUILDERRORS BESEITIGEN
Alter Code Neuer Code
IRGEND WANN LÄSST ES SICH STARTEN…
Aktualisieren Analysieren Portieren Reparieren Validieren
Quelle: https://github.com/dotnet/platform-compat
STATISCHE CODE ANALYSE
Falsches Paket!!!
STATISCHE CODE ANALYSE
STATISCHE CODE ANALYSE
Vorher
Nachher
STATISCHE CODE ANALYSE
STATISCHE CODE ANALYSE
Tritt erst auf wenn man den Button klickt...
TESTEN
Der nächste Punkt an dem es im
Beispiel knallen wird…
EF VS. EF CORE
Quelle: https://docs.microsoft.com/de-de/ef/efcore-and-ef6/porting/
Quelle: https://docs.microsoft.com/de-de/ef/efcore-and-ef6/index
public class DataContext : DbContext
{
public DbSet<Publication> Publications { get; set; }
public DbSet<Medium> Media { get; set; }
public DbSet<Project> Projects { get; set; }
public DbSet<Publisher> Publishers { get; set; }
public DataContext()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
optionsBuilder.UseSqlite(connection);
}
}
}
LOGISCHE FEHLER LÖSEN
ANPASSBARKEIT VS. BUSSINESS VALUE
Innere Qualität /
Anpassbarkeit
Business Value
Start der
Entwicklung
Featureentwicklung mit
geringem Qualitätsanspruch
Featureentwicklung
unter hohem Zeitdruck
Entfernen fehlerhafter
Bestandteile
Umfassende
Restrukturierung inkl.
neuer Features
Einsatz der
Pfadfinderregel
Softwaresystem
Softwaresystem
Fehlerkosten
Prozessfortschritt
Automatisierte Tests
Manuelle Tests
Abnahme durch Fachbereich
Produktiveinsatz Fachbereich
Auswirkungen auf Endkunden
Entwicklungsintern
Extern
Die Einen sehen was und sagen nix.
Die Anderen sehen was und machen nix.
Die Nächsten machen nix und sehen deshalb nix.
Die Letzten explodieren.
Vertrauen
AufwandFeedback
sogehtsoftware.de
ZUSAMMENFASSUNG
Basierend auf: https://devblogs.microsoft.com/dotnet/migrating-a-sample-wpf-app-to-net-core-3-part-1/
Aktualisieren
Unnötige
Referenzen
entfernen.
Aktualisierung
der NuGet
Config.
• Überprüfen der
externen
Abhängigkeiten.
• Aktualisieren
externer
Abhängigkeiten.
• Testen
Analysieren
• Prüfen der
verwendeten
APIs mit
Portability
Analyzer.
• Prüfen welche
Abhängigkeiten
gebraucht
werden
• Suchen nach
alternativen
Frameworks
Migrieren
• Anlegen neuer
*.csproj Datei
• Kopieren
wichtiger
Bestandteile aus
alter *.csproj
• Projektdatei in
Solution
austauschen
• Package
Restore & Build
Reparieren
• API Änderungen
prüfen
• Code fixen
• Generierten
Code erneut
generieren
• Kompilieren
• Anpassen
möglicher
Config-Scripte
Validieren
• Check mit
Codeanalyse
• Testen
• Testen
• Testen
• Testen
• Testen
• Testen
• Testen
• Testen
• Teten
• Testen
Iterativ inkrementell je Softwaremodul
MIGRATIONSSTRATEGIEN
BIG BANG
Alt
Neu
Kick-Off Neues Produkt Mögliche Ablösung
altes Produkt
Funktionsumfang
t
BIG BANG
Alt
Neu
Kick-Off Neues Produkt Mögliche Ablösung
altes Produkt
Funktionsumfang
t
BIG BANG
SCHICHTEN & KONTEXTE
Gesamtanwendung
Datenhaltung
Darstellung
Vermittlung
Geschäftslogik
Publikationen Verlage Projekte
WPF & WinForms
WCF
EF
Migration
technischer
Schichten
Migration
fachlicher
Kontexte
sogehtsoftware.de
MIGRATION VON TECHNISCHEN
SCHICHTEN
SPRINT 0
Gesamtanwendung
Datenhaltung
.NET Classic .NET Core
Gesamtanwendung
SPRINT 0
Datenhaltung
.NET Classic .NET Core
Gesamtanwendung
SPRINT 1
Datenhaltung
.NET Classic .NET Core
SPRINT 2
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, tseten, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
Gesamtanwendung
SPRINT 3
Datenhaltung
.NET Classic .NET Core
SPRINT 4
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, netset, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
Gesamtanwendung
SPRINT 5
Datenhaltung
.NET Classic .NET Core
SPRINT 6
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, tessen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen, testen,
Gesamtanwendung
SPRINT 7
Datenhaltung
.NET Classic .NET Core
CHICKEN LITTLE
Analyse des
Bestandssystems
Zerlegung der
Systemstruktur
Design der
Zielschnittstellen
Design des
Zielsystems
Design der
Zieldatenbank
Aufbau
notwendiger
Gateways
Migration der
Legacy
Datenbanken
Migration der
Legacy
Applikationen
Migration der
Legacy
Schnittstellen
Abschalten des
Altsystems
CHICKEN LITTLE
Quelle: Brodie, M. L., & Stonebraker, M. (1995). Migrating Legacy Systems: Gateways, Interfaces & the Incremental Approach. San Francisco:
Morgan Kaufmann Publishers.
Analyse des Bestandssystems
CHICKEN LITTLE
MainWindow
Zerlegung der Systemstruktur
CHICKEN LITTLE
MainWindow
XAML
Logik
EF Code
MainWindow
XAML
Logik
EF Code
IPublicationManager
Design der Zielschnittstellen
CHICKEN LITTLE
IPublicationRepository
PublicationViewModel
Aufbau notwendiger Gateways
CHICKEN LITTLE
MainWindow
XAML
Logik
PublicationRepository
IPublicationRepository
„Gateway“EF Code
Migration des Legacy Systems
CHICKEN LITTLE
MainWindow
XAML
Logik
PublicationRepository
IPublicationRepository
„Gateway“
Entity Framework
EF Code
Schrittweise Übertragung
Abschalten des „Altsystems“
CHICKEN LITTLE
MainWindow
XAML
Logik
PublicationRepository
IPublicationRepository
„Gateway“
Entity Framework
Endzustand
CHICKEN LITTLE
MainWindow
PublicationRepository
IPublicationRepository
Entity Framework
PublicationViewModel
IPublicationManager
PublicationManager
Vorteile
› Verringerung des gleichzeitigen Aufwandes durch
Schrittweises vorgehen
› Weniger Planung & Absprache notwendig als bei Alternative.
Nachteile
› Man migriert was da ist, nicht was sinnvoll ist.
› Änderungen an einer Schicht können sich auf das
Gesamtsystem auswirken.
› Fehler sind schwer einzugrenzen.
MIGRATION VON TECHNISCHEN SCHICHTEN
sogehtsoftware.de
MIGRATION FACHLICHER KONTEXTE
STAKEHOLDER MAP
BEISPIELSZENARIO
ConsultR
BEISPIELPROJEKT WEITER GEDACHT
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
CONTEXT MAP
Sales Invoiceing
Consulting
CONTEXT MAP
Sales
S
Invoiceing
G
C – Core Domain
S – Support Domain
G – Generic Domain
Consulting
C
ACL
C – Core Domain
S – Support Domain
G – Generic Domain
​G
​SG
S
G
G
S
G
C
S
C
G
CONTEXT MAP
​G
​SG
S
G
G
S
G
C
S
C
G
C – Core Domain
S – Support Domain
G – Generic Domain
CONTEXT MAP
Team 3Team 2
Team 1
C – Core Domain
S – Support
Domain
​G
​SG
S
G
G
S
G
C
S
C
G
CONTEXT MAP
Team 3Team 2
Team 1
​G
​SG
S
G
G
S
G
C
S
C
G
C – Core Domain
S – Support
Domain
CONTEXT MAP
Sales
Module UI
Logic Data
Interfaces
Invoicing
ModuleUI
LogicData
Interfaces
Rahmen-
applikation
Invoicing benötigt
Daten von Sales
Initialisiert
Invoicing
Initialisiert
Sales
Invoicing Sales
ZIELZUSTAND
CHANGE BY EXTRACTION
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
Applikationsinfrastruktur
CHANGE BY EXTRACTION
Zeiterfassung
Projekt-
verwaltung
Auftragseingang
3rd Party
Anbindung
Rechnungslegung
CHANGE BY EXTRACTION
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
ConsultR Light
Vorgehen
CHANGE BY SPLITT
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
Vorgehen
CHANGE BY SPLITT
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
ConsultR
Controlling
ConsultR Light
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
Rechnungslegung Auftragseingang
Applikationsinfrastruktur
3rd
Party
Anbind
ung
Vorgehen
CHANGE BY SPLITT
ConsultR
Controlling
ConsultR Light
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
Rechnungslegung Auftragseingang
Applikationsinfrastruktur
Vorgehen – realistischer Zustand
CHANGE BY SPLITT
Projekt-
verwaltung
Zeiterfassung
3rd
Party
Anbind
ung
Rechnungslegung
Auftragseingang
Applikationsinfrastruktur
3rd
Party
Anbind
ung
CHANGE BY SPLITT + EXTRACT
ConsultR Light
ConsultR
Controlling
ISOLATE CORE DOMAINS
Applikationsinfrastruktur
Zeiterfassung
Projekt-
verwaltung
Auftragseingang
3rd Party
Anbindung
Rechnungslegung
ISOLATE CORE DOMAINS
Applikationsinfrastruktur
Zeiterfassung
Projekt-
verwaltung
Auftragseingang
3rd Party
Anbindung
Rechnungslegung
ConsultR
DOWNSIZING
Rechnungslegung Auftragseingang
Projekt-
verwaltungApplikationsinfrastruktur
Zeiterfassung
3rd
Party
Anbind
ung
DOWNSIZING
Auftrags-
eingang
Projekt-
verwaltung
Rechnungs-
legung
Zeiterfassung
Vorteile
› Man migriert was gebraucht wird.
› Änderungen lassen sich besser planen und kommunizieren.
› Änderungen lassen sich anhand von Features organisieren.
› Verringerung des gleichzeitigen Aufwandes durch schrittweises Vorgehen.
Nachteile
› Hoher Planungs- und Kommunikationsaufwand.
› Es wird sehr viel mehr Zeit gebraucht.
MIGRATION VON FACHLICHEN KONTEXTEN
sogehtsoftware.de
FAZIT
SOFTWAREEVOLUTION
t
Servicing
Wertsteigernde
Investitionen
Werterhaltende
Investitionen
100%
0
Initial Entwicklung Evolution
Anfang 2018 ab 2020
Supportinformationen: https://support.microsoft.com/en-us/lifecycle/search?alpha=.net%20framework
MUSS ICH MIGRIEREN?
02
01
03
04
05
Analyse
#Stakeholderanalyse #Kontextanalyse #Ist-Architektur
Planung
#Soll-Architektur #Roadmap #Stakeholder
Bereinigung
#Codeanalyse #Testautomatisierung #Refactoring
Migration
#Chicken-Little #Kontext #iterativ
Überwachung
#DevOps #Monitoring
#Issuetracking
ZUSAMMENFASSUNG
Hendrik Lösch
Senior Consultant & Coach
Hendrik.Loesch@saxsys.de
@HerrLoesch
Hendrik-Loesch.de
Frank Kubis
Consultant
Frank.Kubis@saxsys.de
@FrankKubis

Weitere ähnliche Inhalte

Was ist angesagt?

Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!gedoplan
 
Migration zum Zend Framework 3
Migration zum Zend Framework 3Migration zum Zend Framework 3
Migration zum Zend Framework 3Ralf Eggert
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with youSandro Sonntag
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Springdenschu
 

Was ist angesagt? (7)

Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!
 
Helm introduction
Helm introductionHelm introduction
Helm introduction
 
Migration zum Zend Framework 3
Migration zum Zend Framework 3Migration zum Zend Framework 3
Migration zum Zend Framework 3
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 

Ähnlich wie .NET zu .NET Core

Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
10 Gute Gruende - NetApp DevOps
10 Gute Gruende - NetApp DevOps10 Gute Gruende - NetApp DevOps
10 Gute Gruende - NetApp DevOpsNetApp_Germany
 
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine ÜbersichtJürgen Gutsch
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und ReflectionStefan Marr
 
Testfallgenerierung fuer interagierende Services
Testfallgenerierung fuer interagierende ServicesTestfallgenerierung fuer interagierende Services
Testfallgenerierung fuer interagierende ServicesUniversität Rostock
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015AboutYouGmbH
 
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...nine
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Informatik Aktuell
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Managementinovex GmbH
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudMarc Müller
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Digicomp Academy AG
 

Ähnlich wie .NET zu .NET Core (20)

Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
10 Gute Gruende - NetApp DevOps
10 Gute Gruende - NetApp DevOps10 Gute Gruende - NetApp DevOps
10 Gute Gruende - NetApp DevOps
 
Arquillian
ArquillianArquillian
Arquillian
 
Api services
Api servicesApi services
Api services
 
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
 
Testfallgenerierung fuer interagierende Services
Testfallgenerierung fuer interagierende ServicesTestfallgenerierung fuer interagierende Services
Testfallgenerierung fuer interagierende Services
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
 
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...
TechTalkThursday 02.03.2017: Container-Orchestrierung mit OpenShift - Unser W...
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
3. Night of the pack
3. Night of the pack3. Night of the pack
3. Night of the pack
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der Cloud
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4
 

Mehr von Hendrik Lösch

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyHendrik Lösch
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!Hendrik Lösch
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationHendrik Lösch
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum ModulithHendrik Lösch
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungHendrik Lösch
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als SoftwarearchitektHendrik Lösch
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!Hendrik Lösch
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das VueniverseHendrik Lösch
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für CodehausmeisterHendrik Lösch
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a CodehausmeisterHendrik Lösch
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
Clean mit visual studio
Clean mit visual studioClean mit visual studio
Clean mit visual studioHendrik Lösch
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring PatternsHendrik Lösch
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Hendrik Lösch
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteHendrik Lösch
 

Mehr von Hendrik Lösch (20)

Why (most) softwareprojects fail silently
Why (most) softwareprojects fail silentlyWhy (most) softwareprojects fail silently
Why (most) softwareprojects fail silently
 
We (don't) need a software architect!?!
We (don't) need a software architect!?!We (don't) need a software architect!?!
We (don't) need a software architect!?!
 
Restrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen GroßapplikationRestrukturierung einer industriellen Großapplikation
Restrukturierung einer industriellen Großapplikation
 
Vom Monolith zum Modulith
Vom Monolith zum ModulithVom Monolith zum Modulith
Vom Monolith zum Modulith
 
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die ArchitekturbewertungDer Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
Der Software auf den Zahn gefühlt - Einstieg in die Architekturbewertung
 
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
„Wie reden Sie denn mit mir?!?“ – Stakeholder überzeugen als Softwarearchitekt
 
Software ist was du draus machst!
Software ist was du draus machst!Software ist was du draus machst!
Software ist was du draus machst!
 
Modular mit .NET
Modular mit .NETModular mit .NET
Modular mit .NET
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Migrationsstrategien
MigrationsstrategienMigrationsstrategien
Migrationsstrategien
 
Einstieg in das Vueniverse
Einstieg in das VueniverseEinstieg in das Vueniverse
Einstieg in das Vueniverse
 
Survivalkit für Codehausmeister
Survivalkit für CodehausmeisterSurvivalkit für Codehausmeister
Survivalkit für Codehausmeister
 
Confessions of a Codehausmeister
Confessions of a CodehausmeisterConfessions of a Codehausmeister
Confessions of a Codehausmeister
 
Hey, wie geht es dir?
Hey, wie geht es dir?Hey, wie geht es dir?
Hey, wie geht es dir?
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Clean mit visual studio
Clean mit visual studioClean mit visual studio
Clean mit visual studio
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Codesmells
CodesmellsCodesmells
Codesmells
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
Der Healthcheck für Softwareprojekte
Der Healthcheck für SoftwareprojekteDer Healthcheck für Softwareprojekte
Der Healthcheck für Softwareprojekte
 

.NET zu .NET Core

Hinweis der Redaktion

  1. .NET Standard ist wie ein Interface, dass dann von den Platformabhängigen Implementierungen realisiert wird.
  2. .NET Core 3.0 wurde in September veröffentlicht .NET Core 3.1 = Langzeitunterstütrung (LTS) .NET 5.0 wird in November 2020 veröffentlicht Hauptversion wird jedes Jahr veröffentlicht, LTS alle zwei Jahre Planbar Schedule, Minor-Version wird im Bedarfsfall veröffentlicht
  3. Eigentlich spricht man bei der Übertragung von Daten eher von Migration und bei der Übertragung von Funktionalität von Portierung. Beide Begriffe werden aber gern synonym verwendet.
  4. Das hilft dabei, sich bei der Umstellung auf das wichtige zu konzentrieren.
  5. Mit FuGet kann man prüfen wie sich die API der externen Abhängigkeiten geändert hat. Man kann aber auch im NuGet Explorer nachsehen. Einige Pakete, welche .NET Framework unterstützen, funktionieren auch unter .NET Core. Diese Pakete weiter zu verwenden ist jedoch riskant, da es passieren kann, dass das Paket versucht eine .NET-API aufzurufen, welche unter .NET Core nicht verfügbar ist, was wiederum eine RuntimeException zur Folge hätte. Manchmal unterstützen neuere Versionen als die derzeit verwendete .NET Core. Es kann jedoch sein, dass die neuere Version Veränderungen enthält, welche anderweitige Probleme mit sich führen können. Informationen zum Aktualisieren des Pakets finden sich im nächsten Abschnitt. Manchmal gibt es von einem Paket separate .Core- bzw .NetCore-Pakete, welche stattdessen verwendet werden können. Sind alle Alternativen erschöpft, muss nach einem alternativen Paket gesucht werden, welches das aktuelle ersetzen kann. Dies ist jedoch mit deutlichem Mehraufwand verbunden.
  6. Man könnte den Stand auch schon ausrollen und ein paar Wochen in Produktion laufen lassen!
  7. .NET Core ist Plattformunabhängig. Wollen wir also auch WPF zum Laufen bekommen brauchen wir die Plattform Extensions für Windows!
  8. .NET Core ist Plattformunabhängig. Wollen wir also auch WPF zum Laufen bekommen brauchen wir die Plattform Extensions für Windows! Die Prozentangaben sagen nicht aus, dass die API sind die wir nutzen, sondern die angeboten werden!
  9.   gRPC   gRPC wurde ursprünglich von Google entwickelt und besitzt ein ähnliches Konzept wie WCF. Es werden Contracts definiert, aus welchen anschließend das Codegerüst für Client und Server generiert werden kann. Hierzu wird eine eigene Sprache, die Interface Definition Language (IDL), verwendet. Der generierte Code beinhaltet bereits alles, was zum Ausführen des Services benötigt wird, sodass sich der Entwickler auf die Implementierung der Funktionalität konzentrieren kann. gRPC nutzt eine HTTP-Verbindung.   gRCP unterstützt weiterhin einige komplexere Fähigkeiten von WCF, wie Full-Duplex Messaging over TCP. Der generierte Code arbeitet sehr effizient und kümmert sich um die (De-)Serialisierung der Daten und Requests/Reponses. Für die Serialisierung wird Protobuf verwendet, welches Traffic-arm und speichereffizient arbeitet. Dadurch lassen sich gRCP-Projekte sehr gut skalieren. gRCP-Projekte lassen sich direkt aus Visual Studio heraus erstellen.     CoreWCF   Bei CoreWCF handelt es sich um eine quelloffene Portierung von WCF zu .NET Core, welche von der .NET Foundation unterstützt wird. Die Portierung ist grundsätzlich lauffähig, allerdings noch nicht für produktive Umgebunden geeignet.     ASP.NET Quelle: https://dotnet.microsoft.com/apps/aspnet (abgerufen am 14.11.2019, 17:45 Uhr)   ASP.NET ergänzt .NET um Tools und Bibliotheken zur Entwicklung von Web Apps. Microsoft teilt die Features von ASP.NET dabei in vier Bereiche auf:   Web Apps ASP.NET bietet die Möglichkeit, Web Apps mit HTML5, CSS, JavaScript und C# zu bauen. Mittels Entity Framework lässt sich einfach auf bestehende Daten aus den meisten beliebten Datenbanksystemen zugreifen. Außerdem ist eine Nutzerdatenbank mit Unterstützung für Muti-Factor-Authentication und Authentifizierung über Drittservices integriert. Dynamische Inhalte lassen sich mittels der Markup-Sprache Razor einfach erstellen. ASP.NET Web Apps sind nach dem Model-View-Controller-Prinzip aufgebaut.   APIs Mit ASP.NET lassen sich einfach REST APIs erstellen, welche ein einfaches Request-Response-Verfahren zur Abfrage von Daten von einem Server bereitstellen. ASP.NET setzt standardmäßig auf HTTPS und bietet mehrere Möglichkeiten der Authentifizierung/Autorisierung, wie JSON Web Tokens und Policies. Daten werden automatisch zu JSON serialisiert. […]   Real-time (WebSockets/SignalR) WebSockets stellen eine einfache Möglichkeit dar, eine Client-Server-Verbindung herzustellen und über diese Daten auszutauschen. WebSockets sind message-agnostic, die zu sendenden Nachrichten können also in jedem beliebigen Format vorliegen, solange der Empfänger mit diesem umgehen kann. SignalR ist ein ASP.NET-Core-Feature, welches einen einfachen Wrapper für WebSockets bereitstellt. Es bietet Unterstützung für JSON- und MessagePack-Serialisierung und besitzt einen geringen Netzwerk-Overhead.
  10. Alte und neue Projektdatei im Vergleich .NET Core 3.0 verwendet ein neues Format für die Projektdatei. Im <Project>-Element wird das vom Projekt verwendete SDK angegeben. Die größte Änderung ist, dass sämtliche Quelldateien (C#, resx, XAML) in Zukunft nicht mehr explizit in der Projektdatei angegeben werden. Stattdessen werden diese in Visual Studio automatisch dem Projekt hinzugefügt. Dadurch wird die Projektdatei deutlich übersichtlicher. In .NET Core werden NuGet-Pakete global statt pro Projekt installiert und die pro Projekt genutzten Pakete einfach in der Projektdatei mittels <PackageReference> referenziert. Weiterhin generiert eine .NET Core 3.0 App automatisch Assembly-Attribute (z.B. Titel, Autor, Version der App). Damit diese selbst angegeben werden können, muss <GenerateAssemblyInfo>false</GenerateAssemblyInfo> hinzugefügt werden.
  11. Falls noch nicht passiert, jetzt muss man es auf jeden Fall tun.
  12. Der Halen bei „Vorabversion einbeziehen“ muss gesetzt sein.
  13. Nicht nur das sich die Frameworks anders verhalten. Man stolpert auch über Fehler die ohnehin schon in der Software stecken ohne, dass man es bisher gemerkt hat.
  14. Man beachte auch, dass die Pfeile immer kürzer werden.
  15. Verringerung des Ressourcenbedarfs. Optimierung des Quellcodes durch vereinheitlichte Konzepte. Ablösen alter Frameworks durch neue.
  16. Das Softwaresystem war ein Monolith. Wir haben Teile des Monolithen verändert. Damit wurden unsere Änderungen Teil des Monoliths und wir übernahmen die Verantwortung für alle Fehler die darin enthalten sind.
  17. Das Softwaresystem war ein Monolith. Wir haben Teile des Monolithen verändert. Damit wurden unsere Änderungen Teil des Monoliths und wir übernahmen die Verantwortung für alle Fehler die darin enthalten sind.
  18. Es wird an anderen Features, nicht aber an der Migration gearbeitet. Dadurch bekommen die Stakeholder ihre Wertsteigerung, es wird erst einmal nach Fehlern bei der Migration gesucht und die Migration blockiert nicht die gesamte Entwicklung.
  19. Es wird an anderen Features, nicht aber an der Migration gearbeitet. Dadurch bekommen die Stakeholder ihre Wertsteigerung, es wird erst einmal nach Fehlern bei der Migration gesucht und die Migration blockiert nicht die gesamte Entwicklung.
  20. Es wird an anderen Features, nicht aber an der Migration gearbeitet. Dadurch bekommen die Stakeholder ihre Wertsteigerung, es wird erst einmal nach Fehlern bei der Migration gesucht und die Migration blockiert nicht die gesamte Entwicklung.
  21. Farben – Fachlichkeit Vierecke – Teams Schwarze Pfeile – Upstream Beziehung Rote Pfeile – Schlecht gewählte Upstream Beziehungen Orangene Pfeile – Partnerschaftliche Beziehungen Legt man die Verantwortlichkeiten der Teams darüber, merkt man, wo Abhängigkeiten zwischen den Teams bestehen. Hier ist es insbesondere schwierig, weil Partnerschaftliche Beziehungen zwischen Modulen bestehen die bei unterschiedlichen Teams liegen. Außerdem liegen Module der gleichen Fachlichkeit bei unterschiedlichen Teams.
  22. Grüne Pfeile -> bewusste Abhängigkeitsumkehr. Die Quellcodemenge die zu betreuen ist, ist fast noch die gleiche. Team 1 hat etwas mehr zu tun.
  23. Farben – Fachlichkeit Vierecke – Teams Schwarze Pfeile – Upstream Beziehung Rote Pfeile – Schlecht gewählte Upstream Beziehungen Orangene Pfeile – Partnerschaftliche Beziehungen Legt man die Verantwortlichkeiten der Teams darüber, merkt man, wo Abhängigkeiten zwischen den Teams bestehen. Hier ist es insbesondere schwierig, weil Partnerschaftliche Beziehungen zwischen Modulen bestehen die bei unterschiedlichen Teams liegen. Außerdem liegen Module der gleichen Fachlichkeit bei unterschiedlichen Teams.
  24. Grüne Pfeile -> bewusste Abhängigkeitsumkehr. Die Quellcodemenge die zu betreuen ist, ist fast noch die gleiche. Team 1 hat etwas mehr zu tun.
  25. Klare fachliche Trennung einzelner Module. Fachliche wie technische Bestandteile können leicht ausgetauscht oder verändert werden. Gerichtete und damit nachvollziehbare Abhängigkeiten. Änderungen wirken sich nur auf einen definierten Teilbereich aus und sind frei von Nebeneffekten. Kommunikation nur über abstrakte Schnittstellen. Es ist leicht automatisierte Tests zu verfassen und Bestandteile unabhängig voneinander zu betrachten. Zusammensetzung der Anwendung durch entsprechende Modulaggregatoren und eine Rahmenapplikation. Definierte Schlüsselpunkte weisen hohe Komplexität auf, alle anderen eher geringe. Einheitliches Vorgehen bei der Umsetzung neuer Funktionalität. Geringer Einarbeitungsaufwand.
  26. Anwendung wird geklont. Ab der Stelle wo sie geklont wurde, laufen sie bewusst auseinander und kümmern sich nicht mehr umeinander.
  27. Der Code wird aufgespalten Man entfernt die anderen Bestandteile komplett.
  28. Es wird nur das entfernt was definitiv nicht gebraucht wird. Alles andere bleibt drin, selbst wenn es ggf. nicht benötigt wird.
  29. Die gemeinsamen Bestandteile werden wieder zusammen geführt und den anderen Teilen zur Verfügung gestellt.
  30. Die gemeinsamen Bestandteile werden wieder zusammen geführt und den anderen Teilen zur Verfügung gestellt.
  31. Die gemeinsamen Bestandteile werden wieder zusammen geführt und den anderen Teilen zur Verfügung gestellt.
  32. Das System wird in viele, völlig eigenständige Systeme (Self-Contained Services zerlegt).