Wzorce projektowe w .NET
Projektowanie zorientowane
obiektowo z wykorzystaniem C# i F#
Wzorce
projektowe są bardzo przydatnym narzędziem w przyborniku programisty.
Pozwalają na szybkie opracowanie złożonych zagadnień, ale można je
również potraktować jako wstęp do ciekawego i inspirującego
dochodzenia, jak rozwiązać konkretny problem na wiele
różnych sposobów, na różnych poziomach
zaawansowania technicznego i z zastosowaniem różnego rodzaju
kompromisów. Takie próby jednak często prowadzą
do nadinżynierii lub powstawania zbyt skomplikowanych struktur i
mechanizmów. Chociaż bywa to zabawne i pomaga w doskonaleniu
umiejętności programistycznych, nie jest pożądanym sposobem tworzenia
systemów produkcyjnych.
To
książka przeznaczona dla programistów C#, którzy
chcą poszerzyć wiedzę na temat sztuki programowania dzięki
wykorzystaniu nowoczesnych technik projektowych do rozwiązywania
konkretnych problemów programistycznych w optymalny
sposób.
Dogłębnie przedstawiono tu implementację klasycznych wzorców
wraz ze wskazówkami dotyczącymi ich możliwości.
Omówiono znaczenie poszczególnych cech
języków C# i F# dla implementacji wzorców.
Pokazano cały szereg przykładów i scenariuszy, możliwych
implementacji wzorców, ich alternatyw i wzajemnych relacji.
Co więcej, zaprezentowano sposób wykorzystania dedykowanego
narzędzia ReSharper do łatwej implementacji wzorców
projektowych.
W tej książce między innymi:
- zasady projektowania SOLID
- cechy C# i F# związane z
paradygmatem funkcyjnym
- kreacyjne wzorce projektowe
- praca w środowisku Visual
Studio
O
autorze
Wprowadzenie
Dla kogo jest ta książka?
O przykładach kodu
Część I.
Wprowadzenie
Rozdział 1.
Zasady
projektowania SOLID
Zasada pojedynczej odpowiedzialności
Zasada otwarty-zamknięty
Zasada podstawiania Liskov
Zasada segregacji interfejsów
Zasada odwracania zależności
Rozdział 2.
Perspektywa
funkcyjna
Podstawy funkcji
Literały funkcyjne w języku C#
Funkcje przechowywania w C#
Literały funkcyjne w języku F#
Kompozycja
Cechy języka związane z paradygmatem funkcyjnym
Część II.
Wzorce kreacyjne
Rozdział 3
.
Budowniczy
Scenariusz
Prosty budowniczy
Płynny budowniczy
Komunikowanie zamiaru
Złożony budowniczy
Parametry budowniczego
Dziedziczenie płynnego interfejsu
Konstrukcja DSL w F#
Podsumowanie
Rozdział 4
.
Fabryki
Scenariusz
Metoda fabrykująca
Fabryka
Fabryka wewnętrzna
Separacja logiczna
Fabryka abstrakcyjna
Fabryka funkcyjna
Podsumowanie
Rozdział 5.
Prototyp
Kopiowanie głębokie i płytkie
ICloneable to zły pomysł
Głębokie kopiowanie z wykorzystaniem specjalnego interfejsu
Głębokie kopiowanie obiektów
Duplikacja za pomocą konstruktora kopiującego
Serializacja
Fabryka prototypów
Podsumowanie
Rozdział 6.
Singleton
Singleton według konwencji
Klasyczna implementacja
Leniwe ładowanie
Kłopoty z singletonami
Singletony a IoC
Monostat
Podsumowanie
Część III.
Wzorce strukturalne
Rozdział 7.
Adapter
Scenariusz
Adapter
Tymczasowe stany adaptera
Problem z generowaniem skrótów
Adapter właściwości (surogat)
Adaptery w .NET Framework
Podsumowanie
Rozdział 8.
Most
Konwencjonalny most
Most do dynamicznego prototypowania
Podsumowanie
Rozdział 9.
Kompozyt
Grupowanie obiektów graficznych
Sieci neuronowe
Opakowanie kompozytu
Podsumowanie
Rozdział 10.
Dekorator
Niestandardowy StringBuilder
Adapter-dekorator
Wielokrotne dziedziczenie
Dynamiczna kompozycja dekoratora
Dekorator statyczny
Dekorator funkcyjny
Podsumowanie
Rozdział 11.
Fasada
Budowa terminalu handlowego
Zaawansowany terminal
Gdzie jest fasada?
Podsumowanie
Rozdział 12.
Pyłek
Nazwy użytkowników
Formatowanie tekstu
Podsumowanie
Rozdział 13.
Pełnomocnik
Pełnomocnik zabezpieczający
Pełnomocnik właściwości
Pełnomocnik wirtualny
Pełnomocnik komunikacji
Podsumowanie
Część IV.
Wzorce zachowań
Rozdział 14.
Łańcuch odpowiedzialności
Scenariusz
Łańcuch metod
Łańcuch brokerów
Podsumowanie
Rozdział 15.
Polecenie
Scenariusz
Implementacja wzorca Polecenie
Operacje cofania
Polecenia złożone
Polecenie funkcyjne
Zapytania i rozdzielanie zapytań od poleceń
Podsumowanie
Rozdział 16.
Interpreter
Ewaluator wyrażeń numerycznych
Leksykalizacja
Parsowanie
Wykorzystanie leksera i parsera
Interpreter w paradygmacie funkcyjnym
Podsumowanie
Rozdział 17.
Iterator
Właściwości wspierane przez tablice
Stwórzmy iterator
Ulepszony iterator
Podsumowanie
Rozdział 18.
Mediator
Chat room
Mediator ze zdarzeniami
Podsumowanie
Rozdział 19.
Memento
Rachunek bankowy
Cofnij i ponów
Podsumowanie
Rozdział 20.
Pusty obiekt
Scenariusz
Podejście natrętne
Pusty obiekt
Ulepszenia projektu
Wirtualny pośrednik pustego obiektu
Dynamiczny pusty obiekt
Podsumowanie
Rozdział 21.
Obserwator
Słabe zdarzenie
Obserwatory właściwości
Problemy z zależnościami
Strumienie zdarzeń
Kolekcje obserwowalne
Subskrypcje deklaratywne
Podsumowanie
Rozdział 22.
Stan
Przejścia między stanami zależne od stanu
Maszyna stanów samoróbka
Maszyny stanów z wykorzystaniem biblioteki Stateless
Typy, akcje i ignorowanie przejść
Ponowne wejście w ten sam stan
Stany hierarchiczne
Dodatkowe własności
Podsumowanie
Rozdział 23.
Strategia
Strategia dynamiczna
Strategia statyczna
Strategia funkcyjna
Podsumowanie
Rozdział 24.
Metoda szablonowa
Symulacja gry
Funkcyjna odmiana Metody szablonowej
Podsumowanie
Rozdział 25.
Wizytator
Nachalny wizytator
Wyświetlacz reflektywny
Funkcyjny wizytator reflektywny
Usprawnienia
Co to jest dysponowanie?
Wizytator dynamiczny
Klasyczny wizytator
Implementacja dodatkowego wizytatora
Wizytator acykliczny
Wizytator funkcyjny
Podsumowanie
240
stron, oprawa miękka