Dojos für Entwickler 2

Dojos für Entwickler 2
Автор книги: id книги: 2335565     Оценка: 0.0     Голосов: 0     Отзывы, комментарии: 0 1411,06 руб.     (13,76$) Читать книгу Купить и скачать книгу Купить бумажную книгу Электронная книга Жанр: Языкознание Правообладатель и/или издательство: Bookwire Дата добавления в каталог КнигаЛит: ISBN: 9783844259261 Скачать фрагмент в формате   fb2   fb2.zip Возрастное ограничение: 0+ Оглавление Отрывок из книги

Реклама. ООО «ЛитРес», ИНН: 7719571260.

Описание книги

Auch in Teil 2 der Dojos für Entwickler gewinnt der, der auch übt. Was kann man gewinnen? Die Antwort ist kurz und bündig: Wissen. Stefan Lieser hat weitere 15 Aufgaben und ihre Lösungen formuliert. Stefan ist freiberuflicher Trainer und Berater und Fan von intelligenten Entwicklungsmethoden, die für Qualität der resultierenden Software sorgen. Er denkt sich die Aufgaben aus und gibt dann auch seine Lösung zum Besten. Er wird auch mitteilen, wie lange er gebraucht und wie viele Tests er geschrieben hat.
Stefan Lieser zeigt in jeder Lösung das genaue Vorgehen: Über welche Schritte kommt er zum geforderten Produkt. Dabei muss auch er die ein oder andere Hürde überklettern. Klettern Sie mit ihm und Sie lernen mit Ihm, worauf es bei der Softwareentwicklung ankommt.
Dieses devbook beinhaltet einen Link zum gesamten Originalquellcode, welcher in den einzelnen Kapiteln angesprochen wird.

Оглавление

Stefan Lieser. Dojos für Entwickler 2

Einleitung

Aufgabe 1

MarkDown-Control selbst gebaut. Einfach, einfacher, MarkDown

Lösung 1

Ein UserControl für Markdown-Textauszeichnungen. Show up Mark down

Kleine Schritte

Listing 1. Grundlegende Datenstruktur

Listing 2. Erst mal testen: Fett-Formatierungen erkennen

Listing 3. Eine Klasse für den Schriftstil

Implementation

Listing 4. Fette Markierungen erkennen

Platine

Listing 5. Teile auf der Platine integrieren

UserControl

Listing 6. Textblöcke testen

Listing 7. Textblöcke erzeugen

Listing 8. Das fertige Steuerelement

Fazit

Aufgabe 2

Schlagworte für Digitalfotos. Ordnung im Fotokarton

Lösung 2. JPEG-Metadaten auslesen. Ausgezeichnete Fotos

Metadaten lesen

Listing 1. Metadaten ausgeben

Listing 2. Den Spike starten

Erstaunen und Ärger

Erste Iteration

Mal nicht Test-first

Listing 3. Dateinamen suchen

Listing 4. Test: Dateinamen

Der Spike zahlt sich aus

Listing 5. Stichwörter ermitteln

Listing 6. LINQ nutzen

Listing 7. Test: Stichwörter ermitteln

Listing 8. Doppelte Einträge herausfiltern

Listing 9. Test auf eindeutige Stichwörter

Listing 10. Den Flow zusammensetzen

Listing 11. Integrationstest

Eine App

Listing 12. Integration in eine Konsolenanwendung

Listing 13. Konsolenausgabe auslagern

Listing 14. Das Hauptprogramm

Fazit

Aufgabe 3. Bilddateien parallel verarbeiten. Alle anpacken!

Lösung 3. Parallelisierung im Flow-Design. Erst trennen, dann vereinen

Async/Sync

Listing 1. Den Datenfluss durchreichen

Listing 2. Den neuen Thread explizit starten

Asynchronen Code testen

Listing 3. Nicht optimal: Thread.Sleep

Listing 4. Besser : WaitHandle

ThreadPool

Und wieder synchron

Listing 5. InvokeRequired nutzen

Listing 6. Synchronizer für Windows Forms

Listing 7. Den Synchronizer testen

Trickreicher Test

Listing 8. Test für Windows Forms

Scatter/Gather

Listing 9. Stichwörter ermitteln, einfache Version

Listing 10. Stichwörter ermitteln, parallel

Realisierung

Listing 11. Der Scatter-Baustein

Listing 12. Scatter testen

Gather

Listing 13. Der Gather-Baustein

Der Haken an der Sache

Fazit

Aufgabe 4. Screen-Scraping für Webanwendungen. Wann kommt der Bus?

Lösung 4. Screen Scraping. Nach Daten angeln

Wie geht’s?

Listing 1. HTML-Code der Datenquelle

Listing 2. XPath-Ausdruck testen

Listing 3. Abfahrtzeiten auflisten

Listing 4. Abfahrtzeiten ermitteln

Testen

Lieber gleich asynchron

Listing 5. Einen Handler übergeben

Listing 6. Asynchroner Download

Listing 7. Den HTML-Code parsen

Listing 8. Rohdaten bereinigen

Verbindungen

Listing 9. Den Flow zusammensetzen

Fazit

Aufgabe 5. Mit kleinen Schritten zum Erfolg. Fette Fische fangen

1. Iteration

2. Iteration

3. Iteration

4. Iteration

Lösung 5. Iterativ und evolvierbar entwickeln. Aufbauen statt umbauen

Erst mal nur Konsole

Nachdenken hilft

Listing 1. Den Pfad ermitteln

Listing 2. Test: Pfad ermitteln

Listing 3. Dateien ermitteln

Listing 4. Test: Dateien ermitteln

Listing 5. Klasse für Dateiinformationen

Listing 6. Dateien herausfiltern

Listing 7. Den Filter testen

Listing 8. An der Konsole ausgeben

Jetzt alle zusammen

Listing 9. Elemente miteinander verdrahten

Listing 10. Das Hauptprogramm

Ist der Code evolvierbar?

Ein WPF-UI

Listing 11. Das GUI testen

Listing 12. Code-behind des Formulars

Listing 13. ViewModel

Listing 14. Daten aus dem Flow in das ViewModel mappen

Listing 15. Alle Bestandteile integrieren

Iteration drei

Listing 16. Einen separaten Thread verwenden

Listing 17. Das Abbrechen der Operation ermöglichen

Fazit

Aufgabe 6. Algorithmen und Datenstrukturen. Listig testen

Üben ..

... und reflektieren

Lösung 6. Algorithmen und Datenstrukturen. Fingerübung für den Kopf

Bevor es losging

Was zuerst?

Und welche Methode?

Listing 1. Die ersten Tests zu Add und Count

Listing 2. Add und Count implementieren

Welch ein Aufwand!

O-Notation

Der Haken an der Sache

Listing 3. Ein früher Test

Enumerator

Listing 4. Den Enumerator implementieren

Clear

Contains

Listing 5. Die Tests für die Contains-Methode

CopyTo

Remove

IndexOf

Insert

RemoveAt

Indexer

Listing 6. Der Indexer

Fazit

Aufgabe 7. Dateien verschlüsselt übertragen. Streng geheim

Schritt für Schritt ..

... zur Schlüsselgewalt

Lösung 7. Dojo: Dateien verschlüsselt übertragen. In geheimer Mission

Streams

Listing 1. Dateiverschlüsselung per CryptoStream

Streams und using

Gesalzenes Passwort

Dateien servieren

Verschlüsseln

Client

Listing 2. Implementierung der Datenflüsse des UI

Listing 3. DecryptionJob als Ergebnis von Passwort_ermitteln

Listing 4. Implementieren von Datei_laden

Integration

Listing 5. Implementieren der Platine. Ansicht_aktualisieren

Listing 6. Die Program_cs des Clients

Fazit

Aufgabe 8. Die App als Metronom. Nicht so schnell!

Lösung 8. dotnetpro.dojo: Entwicklung einer Metronom-App mit der Flow-Runtime. Immer schön im Takt!

Wo anfangen?

Start

Wie tickt es denn?

Erster Entwurf

Alles fließt

Nächste Aufgabe starten

Listing 1. Flow für „Nächste Aufgabe starten“

Implementation

Listing 2. Die Klasse Mapper

Listing 3. Operation aufgabe_anzeigen der Runtime bekannt machen

Feature vervollständigen

Listing 4. Der Klasse Metronom eine Instanz von Play übergeben

Listing 5. Timer implementieren

Listing 6. Sound abspielen

Listing 7. Die nächste Aufgabe und das nächste Metrum ermitteln

Pausieren

Gesamtübungsdauer

Listing 8. Die vollständige Konfiguration der Flow-Runtime

Listing 9. Die Klasse Pausenuhr

Und was ist mit Tests?

Fazit

Aufgabe 9. Eine Forms-over-Data-Anwendung entwickeln. Haben Sie noch CDs?

Lösung 9. MP3-Verwaltung mit Flow-Runtime implementieren. Im Fluss der Musik

Slice me nice?

Spike

Listing 1. Spike zum Auslesen der Tags

Endlich eine Scheibe schneiden

Listing 2. INotifyPropertyChanged implementieren (Ausschnitt)

Listing 3. Data Binding testen

Alles ist im Fluss

Arbeitsorganisation

Erste Überraschung

Operationen

Listing 4. Die Operation „Titel bilden“

Listing 5. Nachrichten auf das ViewModel abbilden

Integration

Listing 6. Definition des Flows

Listing 7. Program.cs

Wie geht’s weiter?

Der Umbau

Listing 8. Das Buildskript

Fazit

Aufgabe 10. Eine Chat-Anwendung für die Cloud. Plaudern in der Wolke

Üben!

Bedienung der Anwendung

Lösung 10. dojoLösung: Eine Chat-Anwendung für die Cloud. Alles auf Wolke

Unsicherheiten ausräumen

Wohin mit den Credentials?

Listing 1. Eingabe und Entnahme von Zeichenketten testen

Slice me nice

Interaktionen

Interaktionen und Features

Entwurf

Verfeinern

Listing 2. Flow-Definition

Klassen bilden

Listing 3. Die Klasse Chat

Infrastruktur

Listing 4. Die Klasse QueueFinder

Listing 5. Die Klasse Queue

Ich will was sehen!

Listing 6. Inputs und Outputs des GUI

Integration

Listing 7. Die Klasse AppChatten

Aspekte

Exceptions synchronisieren

Build

Fazit

Aufgabe 11. dojoAufgabe: Erinnerungen per Mail. Nichts mehr vergessen

Erinnerungsservice ..

... rund um die Uhr

Lösung 11. dotnetpro.dojo: Erinnerungen per Mail. Da war doch noch was?!

Erste Lösungsskizze

Grober Ablauf

Spike

Listing 1. Heraussuchen der Mails mit der Erinnerungsdienst-Adresse

Receiver.App

Listing 2. Das Gerüst der Anwendung

Der Parser

Listing 3. Coco/R-Grammatik des Parsers

Listing 4. Die Datenstruktur „Zeitpunkt“

Listing 5. Erstellen eines Erinnerungsauftrags aus einer Mail

E-Mail laden und verschieben

Listing 6. Testen der Operationen

Persistenz

Listing 7. Die Klasse MailStore

Listing 8. Ersetzen der leeren Lambda-Expressions

Fazit

Aufgabe 12. dojoAufgabe: Fotos verwalten. Bildergalerie – Marke Eigenbau

Übung macht den Meister

Vollbildansicht

Exif-Daten

Taggen

Lösung 12. dotnetpro.dojo: Fotos verwalten (Nicht) lost in Details

Schichten versus Aspekte

Theorie und Praxis

Am Anfang beginnen

Implementation

Listing 1. Das ViewModel

Alles im Fluss

Listing 2. Die Klasse Fotobrowser

Listing 3. Der Mapper

GUI

Listing 4. Das TreeView-Control

Listing 5. Testdaten anlegen

Listing 6. Verzeichnisbaum ermitteln

Fazit

Aufgabe 13. Laufwerke und Verzeichnisse anzeigen. Zeig mir den Baum

Events

Die Aufgabe

Schnittstelle

Aspekte und Entwürfe

Lösung 13. dotnetpro.dojo: Ein TreeView-Control entwerfen und implementieren. Baum der Erkenntnis

Entwerfen? Immer!

Anforderungen

Entwurf beginnt wo?

Endlich Code!

Listing 1. Die Klasse DirectoryTree ist für UI und Flow-Initialisierung zuständig

Listing 2. Die Klasse DirectoryTree_UI kümmert sich jetzt um das UI

Listing 3. Die Klasse DirectoryTree initialisiert nur noch den Flow

UIs testen

Listing 4. Der UI-Test

Listing 5. Definition des Typs Directory im ViewModel

Listing 6. Das ViewModel

Listing 7. Die Methode TreeView_SelectedItemChanged im XAML

Listing 8. Verzeichnisliste ins ViewModel übertragen

Listing 9. Die Operation Wurzelverzeichnisse_ermitteln

Listing 10. Testen der Operation Wurzelverzeichnisse_ermitteln

Listing 11. Die Operation Unterverzeichnisse_ermitteln

Listing 12. Ermittelte Unterverzeichnisse in den Baum einhängen

Listing 13. Testen der Operation Unterverzeichnisse_ermitteln

Fazit

Aufgabe 14. Markdown-Texte verarbeiten. Was ist drin?

Markdown

Lösung 14. dotnetpro.dojo: Markdown-Texte verarbeiten. Eins nach dem andern

Anforderungen

Entwurf

Pragmatismus

Implementation

Kommandozeile

Listing 1. Methode für Kommandozeilenzugriff austauschbar machen

Listing 2. Operationen für Kommandozeilenzugriff testen

Dateizugriff

Listing 3. Dateien lesen und schreiben

Nummerieren

Listing 4. Test zu Überschriften_nummerieren – Ebene 1

Listing 5. Implementation von Überschriften_nummerieren mit drei Ebenen

Integration

Listing 6. Ausgangsevent mit Eingangsmethode verbinden

Inhaltsverzeichnis

Filtern

Listing 7. Überschriftenzeilen herausfiltern

Listing 8. Die Operation Inhaltsverzeichnis_nummerieren

Listing 9. Die Operation Concat

Listing 10. Flow in der Klasse Mainboard anpassen

Überraschung zum Schluss

Listing 11. Implementation von Datei_lesen mit Mehrfachöffnung

Fazit

Aufgabe 15. Kommunikation mit Windows Services. Wie sag’ ich’s dem Service?

Lösung 15. Kommunikation mit Windows-Diensten. So klappt’s auch mit dem Service

Spike

Streams

Listing 1. Spike-Implementation der Serverseite

Listing 2. Spike-Implementation der Clientseite

Connected!

Listing 3. Zugriffsberechtigungen festlegen

Windows Service

Listing 4. Windows Service erstellen

Wie spät?

Listing 5. Logik des Service implementieren

Listing 6. Program.cs des Clients

Listing 7. Aktuelle Uhrzeit abfragen und ausgeben

Verteilt

Fazit

Impressum

Отрывок из книги

Alle Originalquellcodes in diesem devbook finden Sie zum Download unter http://www.dotnet-developer-conference.de/downloads/DojosII.zip

.....

[TestFixture, RequiresSTA] public class TextBlöcke_erzeugen_Tests { private TextBlöcke_erzeugen sut; private IEnumerable result; [SetUp] public void Setup() { sut = new TextBlöcke_erzeugen(); sut.Result += x => result = x; } [Test] public void Texte _werden_übernommen() { sut.Process(new[] { new TextElement {Text = "x"}, new TextElement {Text = "y"}, new TextElement {Text = "z"}, }); Assert.That(result.Select(x => x.Text), Is.EqualTo(new[] {"x", "y", "z"})); } [Test] public void Fett_Eigenschaft _wird_übernommen() { sut.Process(new[] { new TextElement {Fett = true}, new TextElement {Fett = false}, new TextElement {Fett = true}, }); Assert.That(result.Select( x => x.FontWeight), Is.EqualTo(new[] { FontWeights.Bold, FontWeights.Normal, FontWeights.Bold })); } [...] }

Die Funktionseinheit muss für jedes TextElement-Objekt ein TextBlock-Objekt erzeugen. Da die WPF-Controls nur im sogenannten Single Thread Apartment (STA) laufen, ist die Testklasse mit dem Attribut RequiresSTA versehen. Die Tests überprüfen, ob der Text korrekt übernommen wird. Ferner wird überprüft, ob Fett- und Kursivschrift korrekt in FontWeight und FontStyle übernommen werden. Dabei lasse ich es für diese Funktionseinheit bewenden. Visuelle Controls erfordern nämlich ohnehin immer eine visuelle Prüfung. Am Ende interessiert den Anwender natürlich nicht, ob irgendwelche Texteigenschaften korrekt gesetzt sind, sondern der Text muss fett bzw. kursiv zu sehen sein, wie auch immer das intern bewerkstelligt wird. Folglich habe ich im WPF-Testprojekt eine Instanz des UserControls in der MainForm erzeugt und mit einem Beispieltext gefüllt. So kann ich visuell prüfen, ob die Formatierung korrekt ist. Abbildung 2 zeigt das Ergebnis. Listing 7 zeigt die Implementation der Funktionseinheit.

.....

Добавление нового отзыва

Комментарий Поле, отмеченное звёздочкой  — обязательно к заполнению

Отзывы и комментарии читателей

Нет рецензий. Будьте первым, кто напишет рецензию на книгу Dojos für Entwickler 2
Подняться наверх