The pain of choice - Important libs for C# developers

59
The Pain of Choice Was in keinem Repertoire fehlen darf… Fabian Deitelhoff >>> dotnet-developer-conference.de #ddc13

description

Session about important libraries/frameworks for C# developers at the DDC13 in Cologne, Germany.

Transcript of The pain of choice - Important libs for C# developers

Page 1: The pain of choice - Important libs for C# developers

The Pain of ChoiceWas in keinem Repertoire fehlen darf…

Fabian Deitelhoff

>>> dotnet-developer-conference.de #ddc13

Page 2: The pain of choice - Important libs for C# developers

Alle Beispiele sind online verfügbarhttps://github.com/Twainsoft/Twainsoft.Talks.DDC13.Libs

>>> dotnet-developer-conference.de #ddc13

Ressourcen

Page 3: The pain of choice - Important libs for C# developers

Das berühmte Rad……nutzen. Nicht neu erfinden!

>>> dotnet-developer-conference.de #ddc13

…Warum Bibliotheken kennen?

Page 4: The pain of choice - Important libs for C# developers

Neues kennenlernenInsbesondere Eindrücke und Ideen zu Problemstellungen.

>>> dotnet-developer-conference.de #ddc13

…Warum Bibliotheken kennen?

Page 5: The pain of choice - Important libs for C# developers

WichtigOftmals reicht schon das Wissen aus, dass es etwas gibt!

>>> dotnet-developer-conference.de #ddc13

…Warum Bibliotheken kennen?

Page 6: The pain of choice - Important libs for C# developers

WichtigZum Einsatz kommen kann es ruhig später.

>>> dotnet-developer-conference.de #ddc13

…Warum Bibliotheken kennen?

Page 7: The pain of choice - Important libs for C# developers

Was mir wichtig ist!Das hier sind alles Beispiele. Bibliotheken gibt es viele.

>>> dotnet-developer-conference.de #ddc13

…Disclaimer!

Page 8: The pain of choice - Important libs for C# developers

Zusammen ist doch schöner…Projekte bestehen in der Regel aus vielen Dateien.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 9: The pain of choice - Important libs for C# developers

Während der Entwicklung?Normalerweise nicht das Problem. Die IDE macht das schon…

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 10: The pain of choice - Important libs for C# developers

Und beim Ausliefern?Das nervt schon mehr…

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 11: The pain of choice - Important libs for C# developers

Mergen ist eine LösungAssemblies beim Buildvorgang zu einer zusammenfassen.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 12: The pain of choice - Important libs for C# developers

LibZKommandozeilentool zum Injizieren von Assemblies.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 13: The pain of choice - Important libs for C# developers

LibZDirektes Injizieren oder über Container.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 14: The pain of choice - Important libs for C# developers

LibZVerschiedene Kompressionsalgorithmen.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 15: The pain of choice - Important libs for C# developers

LibZEinfaches Injizieren über eine Anweisung möglich.

set LIBZ="$(SolutionDir)packages\LibZ.Bootstrap.1.0.3.7\tools\libz.exe"

%LIBZ% inject-dll --assembly $(TargetFileName) --include *.dll--exclude LibZ.Bootstrap.dll --move

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 16: The pain of choice - Important libs for C# developers

LibZEinsatz von Container erfordert einige zusätzliche Anweisungen.

%LIBZ% add --libz DemoSuite.libz --include *.dll--exclude LibZ.Bootstrap.dll --codec deflate –move

%LIBZ% inject-libz -assembly $(TargetFileName) --libz DemoSuite.libz –move

%LIBZ% instrument --assembly $(TargetFileName) --libz-resources

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 17: The pain of choice - Important libs for C# developers

DemoMergen von Assemblies.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 18: The pain of choice - Important libs for C# developers

Was es nicht ist!Keine Obfuskierung der Assemblies.

>>> dotnet-developer-conference.de #ddc13

…LibZ?

Page 19: The pain of choice - Important libs for C# developers

Verarbeitet XML-KommentareStellt eine simple API bereit.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 20: The pain of choice - Important libs for C# developers

Verarbeitet XML-KommentareEinlesen als XML-Datei. Angabe der Assembly optional.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 21: The pain of choice - Important libs for C# developers

static void Main()

{

var docReader = DocReader.Read("ClariusLabs.NuDoc.xml");

docReader.Accept(new MarkdownVisitor("ausgabe-ohne-reflection.md"));

}

static void Main()

{

var docReader = DocReader.Read(Assembly.LoadFrom("ClariusLabs.NuDoc.dll"));

docReader.Accept(new MarkdownVisitor("ausgabe-mit-reflection.md"));

}

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 22: The pain of choice - Important libs for C# developers

Vorteil der zweiten VarianteNuDoc reichert das in-memory Modell mit Informationen an.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 23: The pain of choice - Important libs for C# developers

Einfache VerarbeitungBasis bilden das Visitor- und das Composite-Pattern.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 24: The pain of choice - Important libs for C# developers

Einfache VerarbeitungJedes Element ist „besuchbar“.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 25: The pain of choice - Important libs for C# developers

Einfache VerarbeitungBei der Implementierung wird entschieden, was wichtig ist.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 26: The pain of choice - Important libs for C# developers

DemoXML-Kommentare zu Markdown.

>>> dotnet-developer-conference.de #ddc13

…NuDoc?

Page 27: The pain of choice - Important libs for C# developers

Flüssigere BehauptungenErlaubt das Schreiben von Tests im TDD-Style.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 28: The pain of choice - Important libs for C# developers

Flüssigere BehauptungenTestergebnisse einfacher und natürlicher definieren.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 29: The pain of choice - Important libs for C# developers

Fluent InterfacesIntensiver Gebrauch für eine natürlichere Definition.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 30: The pain of choice - Important libs for C# developers

ErweiterungsmethodenFür alle denkbaren Typen für eine einfache Anwendung.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 31: The pain of choice - Important libs for C# developers

"Hallo Welt"

.Should()

.Be("Hallo welt");

Expected string to be "Hallo welt", but "Hallo

Welt" differs near "Wel" (index 6).

Expected string to be "Hallo welt2" with a length

of 11, but "Hallo Welt" has a length of 10.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 32: The pain of choice - Important libs for C# developers

KombinationenAuch Kombinationen von Bedingungen sind möglich.

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 33: The pain of choice - Important libs for C# developers

"Hallo Welt"

.Should()

.Be("Hallo Welt")

.And.EndWith("T");

Expected string "Hallo Welt" to end with "T".

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 34: The pain of choice - Important libs for C# developers

DemoString, Collection, Numeric, DateTime, Exception

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 35: The pain of choice - Important libs for C# developers

Eine unter vielenEs gibt viele Fluent Assertion Bibliotheken. Anschauen lohnt sich!

>>> dotnet-developer-conference.de #ddc13

…FluentAssertions?

Page 36: The pain of choice - Important libs for C# developers

Der „Umschalter“Funktion A für Kunde A, Funktion B für Kunde B…

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 37: The pain of choice - Important libs for C# developers

Das ist gar nicht so einfach…Mögliche Lösungen sind Lizenzen, Branches, Feature Toggle.

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 38: The pain of choice - Important libs for C# developers

Feature ToggleKonfigurierbare Schalter für Funktionen (Martin Fowler).

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 39: The pain of choice - Important libs for C# developers

Feature ToggleKonfigurierbar ist das Schlüsselwort (zur Laufzeit).

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 40: The pain of choice - Important libs for C# developers

Einfaches BeispielAbfrage eines Features anhand des Typs.

Features.Are.ConfiguredBy.Custom(Features.OfType<Colorize>.Enabled);

if (Feature<Colorize>.Is().Enabled)

{

Console.BackgroundColor = ConsoleColor.Blue;

Console.ForegroundColor = ConsoleColor.Yellow;

}

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 41: The pain of choice - Important libs for C# developers

BesonderheitenKeine Strings, Typabfrage und ein einfacher Syntax.

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 42: The pain of choice - Important libs for C# developers

DemoAbfragen eines Features, Konfigurationen.

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 43: The pain of choice - Important libs for C# developers

AufpassenFeature Toggles sind toll. Allerdings nicht immer.

>>> dotnet-developer-conference.de #ddc13

…FeatureSwitcher?

Page 44: The pain of choice - Important libs for C# developers

Lizensieren……will gelernt sein.

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 45: The pain of choice - Important libs for C# developers

LizenzenKönnen einen Anwender echt nerven…

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 46: The pain of choice - Important libs for C# developers

LizenzenWenn überhaupt notwendig, so transparent wie möglich.

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 47: The pain of choice - Important libs for C# developers

Bibliotheken nutzenKeine Gute Idee, das Rad neu zu erfinden!

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 48: The pain of choice - Important libs for C# developers

Warum Portable.Licensing?Wenig Code notwendig. Viele Funktionen. Schnelle Integration.

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 49: The pain of choice - Important libs for C# developers

Warum Portable.Licensing?Public-Key-Verschlüsselungsverfahren

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 50: The pain of choice - Important libs for C# developers

Nur drei Schritte notwendigSchlüssel erzeugen, Lizenz erzeugen, Lizenz laden

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 51: The pain of choice - Important libs for C# developers

1. Schlüssel erzeugen

Features.Are.ConfiguredBy.Custom(Features.OfType<Colorize>.Enabled);

var keyGenerator = Portable.Licensing.Security.Cryptography.KeyGenerator.Create();

var keyPair = keyGenerator.GenerateKeyPair();

PrivateKey = keyPair.ToEncryptedPrivateKeyString(password.Text.Trim());

PublicKey = keyPair.ToPublicKeyString();

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 52: The pain of choice - Important libs for C# developers

2. Lizenz erzeugen

eatures.Are.ConfiguredBy.Custom(Features.OfType<Colorize>.Enabled);

var license = License.New()

.WithUniqueIdentifier(Guid.NewGuid())

.As(LicenseType.Trial)

.ExpiresAt(DateTime.Now.AddDays(30))

.CreateAndSignWithPrivateKey(PrivateKey, password);

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 53: The pain of choice - Important libs for C# developers

3. Lizenz laden

eatures.Are.ConfiguredBy.Custom(Features.OfType<Colorize>.Enabled);

using (var streamReader = new StreamReader("License.lic"))

{

license = License.Load(streamReader);

}

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 54: The pain of choice - Important libs for C# developers

DemoEine kleine und vollständige Anwendung.

>>> dotnet-developer-conference.de #ddc13

… Portable.Licensing?

Page 55: The pain of choice - Important libs for C# developers

Noch Fragen?

>>> dotnet-developer-conference.de #ddc13

The Pain of Choice

Page 56: The pain of choice - Important libs for C# developers

>>> dotnet-developer-conference.de #ddc13

Vielleicht noch interessant…

BouncyCastle

Page 57: The pain of choice - Important libs for C# developers

Vielen Dank für die Aufmerksamkeit!Viel Spaß noch auf der #DDC13!

>>> dotnet-developer-conference.de #ddc13

The Pain of Choice

Page 58: The pain of choice - Important libs for C# developers

>>> dotnet-developer-conference.de #ddc13

The Pain of ChoiceFabian Deitelhoff

Student, Master of Science Informatik

Schwerpunkt Biomedizinische Informatik

Autor, Speaker, Softwareentwickler

KontaktinformationenE-Mail: [email protected]

Twitter: @FDeitelhoff

Blog: http://www.fabiandeitelhoff.de

Page 59: The pain of choice - Important libs for C# developers

LibZhttp://libz.codeplex.com/

NuDochttps://github.com/clariuslabs/NuDoc

FluentAssertionshttps://github.com/dennisdoomen/FluentAssertions

FeatureSwitcherhttps://github.com/mexx/FeatureSwitcher

Portable.Licensinghttps://github.com/dnauck/Portable.Licensing

>>> dotnet-developer-conference.de #ddc13

Ressourcen und Quellen