the pain of choice - important libs for c# developers
Post on 22-May-2015
310 Views
Preview:
DESCRIPTION
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