the pain of choice - important libs for c# developers

Post on 22-May-2015

310 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

The Pain of ChoiceWas in keinem Repertoire fehlen darf…

Fabian Deitelhoff

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

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

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

Ressourcen

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

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

…Warum Bibliotheken kennen?

Neues kennenlernenInsbesondere Eindrücke und Ideen zu Problemstellungen.

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

…Warum Bibliotheken kennen?

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

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

…Warum Bibliotheken kennen?

WichtigZum Einsatz kommen kann es ruhig später.

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

…Warum Bibliotheken kennen?

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

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

…Disclaimer!

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

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

…LibZ?

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

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

…LibZ?

Und beim Ausliefern?Das nervt schon mehr…

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

…LibZ?

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

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

…LibZ?

LibZKommandozeilentool zum Injizieren von Assemblies.

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

…LibZ?

LibZDirektes Injizieren oder über Container.

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

…LibZ?

LibZVerschiedene Kompressionsalgorithmen.

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

…LibZ?

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?

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?

DemoMergen von Assemblies.

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

…LibZ?

Was es nicht ist!Keine Obfuskierung der Assemblies.

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

…LibZ?

Verarbeitet XML-KommentareStellt eine simple API bereit.

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

…NuDoc?

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

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

…NuDoc?

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?

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

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

…NuDoc?

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

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

…NuDoc?

Einfache VerarbeitungJedes Element ist „besuchbar“.

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

…NuDoc?

Einfache VerarbeitungBei der Implementierung wird entschieden, was wichtig ist.

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

…NuDoc?

DemoXML-Kommentare zu Markdown.

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

…NuDoc?

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

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

…FluentAssertions?

Flüssigere BehauptungenTestergebnisse einfacher und natürlicher definieren.

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

…FluentAssertions?

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

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

…FluentAssertions?

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

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

…FluentAssertions?

"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?

KombinationenAuch Kombinationen von Bedingungen sind möglich.

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

…FluentAssertions?

"Hallo Welt"

.Should()

.Be("Hallo Welt")

.And.EndWith("T");

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

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

…FluentAssertions?

DemoString, Collection, Numeric, DateTime, Exception

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

…FluentAssertions?

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

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

…FluentAssertions?

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

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

…FeatureSwitcher?

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

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

…FeatureSwitcher?

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

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

…FeatureSwitcher?

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

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

…FeatureSwitcher?

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?

BesonderheitenKeine Strings, Typabfrage und ein einfacher Syntax.

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

…FeatureSwitcher?

DemoAbfragen eines Features, Konfigurationen.

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

…FeatureSwitcher?

AufpassenFeature Toggles sind toll. Allerdings nicht immer.

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

…FeatureSwitcher?

Lizensieren……will gelernt sein.

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

… Portable.Licensing?

LizenzenKönnen einen Anwender echt nerven…

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

… Portable.Licensing?

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

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

… Portable.Licensing?

Bibliotheken nutzenKeine Gute Idee, das Rad neu zu erfinden!

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

… Portable.Licensing?

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

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

… Portable.Licensing?

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

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

… Portable.Licensing?

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

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

… Portable.Licensing?

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?

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?

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?

DemoEine kleine und vollständige Anwendung.

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

… Portable.Licensing?

Noch Fragen?

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

The Pain of Choice

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

Vielleicht noch interessant…

BouncyCastle

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

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

The Pain of Choice

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

The Pain of ChoiceFabian Deitelhoff

Student, Master of Science Informatik

Schwerpunkt Biomedizinische Informatik

Autor, Speaker, Softwareentwickler

KontaktinformationenE-Mail: Fabian@FabianDeitelhoff.de

Twitter: @FDeitelhoff

Blog: http://www.fabiandeitelhoff.de

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

top related