Cena katalogowa – rynkowa cena produktu, często jest drukowana przez wydawcę na książce.
Najniższa cena z 30 dni – najniższa cena sprzedaży produktu w księgarni z ostatnich 30 dni, obowiązująca przed zmianą ceny.
Wszystkie ceny, łącznie z ceną sprzedaży, zawierają podatek VAT.
Wstrzykiwanie zależności. Zasady, praktyki, wzorce to poprawiona i rozszerzona wersja bestselleru Dependency Injection in
.NET. Publikacja w sposób kompleksowy omawia zagadnienie wstrzykiwania zależności (DI). Zawiera przykłady, wzorce i antywzorce, które czytelnik może wykorzystać do tworzenia luźno powiązanych, dobrze zorganizowanych aplikacji. Szczegółowo opisany kod i diagramy wykorzystują przykłady w języku C# do zilustrowania zasad, które działają bezbłędnie z nowoczesnymi obiektowo-zorientowanymi językami programowania i bibliotekami DI.
W książce:
• refaktoryzacja istniejącego kodu w luźno powiązany kod,
• techniki DI działające z statycznie typowanymi językami zorientowanymi obiektowo,
• integracja ze znanymi frameworkami .NET,
• zaktualizowane przykłady ilustrujące wykorzystanie DI w .NET Core.
Publikacja przeznaczona dla średniozaawansowanych programistów OO.
przedmowa xv podziękowania xvii o książce xix o autorach xxv o ilustracji na okładce xxvii Część 1 Umiejscowienie Wstrzykiwania zależności na mapie 1 1. Podstawy Wstrzykiwania zależności: co, jak i dlaczego 3 1.1. Pisanie utrzymywalnego kodu 5 Powszechne mity na temat DI 6 Rozumienie celu DI 9 1.2. Prosty przykład: Hello DI! 16 Kod Hello DI! 16 Korzyści (płynące) z DI 19 1.3. Co wstrzykiwać, a czego nie wstrzykiwać 28 STABILNE ZALEŻNOŚCI 29 NIESTABILNE ZALEŻNOŚCI 30 1.4. Zakres DI 31 KOMPOZYCJA OBIEKTOWA 32 CYKL ŻYCIA OBIEKTU 33 PRZECHWYTYWANIE 34 DI w trzech wymiarach 35 1.5. Konkluzje 36 2. Pisanie ściśle powiązanego kodu 39 2.1. Budowanie ściśle powiązanej aplikacji 40 Poznajmy Mary Rowan 41 Tworzenie warstwy danych 42 Tworzenie warstwy domeny 44 Tworzenie warstwy interfejsu użytkownika 48 2.2. Ocena aplikacji ściśle powiązanej 50 Ocena grafu zależności 50 Ocena tworzenia strukturalności 50 2.3. Analiza braku strukturalności 53 Analiza wykresu zależności 53 Analiza interfejsu dostępu do danych 54 Inne kwestie 56 2.4. Konkluzja 57 3. Pisanie luźno powiązanego kodu 59 3.1. Ponowne budowanie aplikacji e-commerce 60 Budowanie bardziej utrzymywanego UI 63 Budowanie niezależnego modelu domeny 69 Budowanie nowej warstwy dostępu do danych 78 Implementacja Adaptera IUserContext specyficznego dla ASP.NET Core 79 Tworzenie aplikacji w PODSTAWIE KOMPOZYCJI 82 3.2. Analiza luźno powiązanej implementacji 82 Zrozumienie interakcji między komponentami 83 Analizowanie nowego grafu zależności 84 Część 2 Katalog 89 4. Wzorce DI 91 4.1. PODSTAWA KOMPOZYCJI 93 Jak działa PODSTAWA KOMPOZYCJI 95 Użycie KONTENERA DI w PODSTAWIE KOMPOZYCJI 96 Przykład: Implementowanie PODSTAWY KOMPOZYCJI przy użyciu CZYSTEGO DI 97 Pozorna eksplozja zależności 100 4.2. WSTRZYKIWANIE KONSTRUKTOREM 102 Jak działa WSTRZYKIWANIE KONSTRUKTOREM 102 Kiedy używać WSTRZYKIWANIA KONSTRUKTOREM 104 Znany sposób użycia WSTRZYKIWANIA KONSTRUKTOREM 107 Przykład: Dodawanie przeliczania walut do wyróżnionych produktów 108 Podsumowanie 110 4.3. WSTRZYKIWANIE METODĄ 112 Jak działa WSTRZYKIWANIE METODĄ 112 Kiedy używać WSTRZYKIWANIA METODĄ 113 Znany sposób użycia WSTRZYKIWANIA METODĄ 119 Przykład: Dodawanie przewalutowania do ENCJI Product 121 4.4. WSTRZYKIWANIE WŁAŚCIWOŚCIĄ 123 Jak działa WSTRZYKIWANIE WŁAŚCIWOŚCIĄ 124 Kiedy używać WSTRZYKIWANIA WŁAŚCIWOŚCIĄ 125 Znane zastosowania WSTRZYKIWANIA WŁAŚCIWOŚCIĄ 128 Przykład: WSTRZYKIWANIE WŁAŚCIWOŚCIĄ jako model rozszerzalności biblioteki do ponownego użycia 128 4.5. Wybieranie wzorca (do pracy) 131 5. Antywzorce DI 135 5.1. ANTYWZORZEC CONTROL FREAK 138 Przykład: CONTROL FREAK przez nowo powstające ZALEŻNOŚCI 139 Przykład: CONTROL FREAK przez fabryki 140 Przykład: CONTROL FREAK przez przeciążone konstruktory 146 Analiza CONTROL FREAK 147 5.2. LOKALIZATOR USŁUG 149 Przykład: ProductService przy użyciu LOKALIZATORA USŁUG 151 Analiza LOKALIZATORA USŁUG 154 5.3. KONTEKST OTOCZENIA 158 Przykład: Dostęp do czasu przez KONTEKST OTOCZENIA 159 Przykład: Logowanie przez KONTEKST OTOCZENIA 161 Analiza KONTEKSTU OTOCZENIA 162 5.4. Antywzorzec OGRANICZONEJ KONSTRUKCJI 166 Przykład: Późne wiązanie ProductRepository 167 Analiza OGRANICZONEJ KONSTRUKCJI 169 6. Zapachy kodu 176 6.1. Radzenie sobie z zapachem kodu Przesadnego Wstrzykiwania Konstruktorem 177 Rozpoznawanie Przesadnego Wstrzykiwania Konstruktorem 179 Refaktorowanie z Przesadnego Wstrzykiwania Konstruktorem do Usług fasadowych 182 Refaktorowanie z Przesadnego Wstrzykiwania Konstruktorem do zdarzeń domeny 187 6.2. Nadużywanie Fabryk abstrakcyjnych 195 Nadużywanie Fabryk abstrakcyjnych do pokonania problemów cyklu życia 195 Nadużywanie Fabryk abstrakcyjnych do wybierania ZALEŻNOŚCI na podstawie danych czasu wykonania 203 6.3. Naprawianie cyklicznych ZALEŻNOŚCI 209 Przykład: Cykliczne ZALEŻNOŚCI spowodowane naruszeniem SRP 211 Analiza cyklu ZALEŻNOŚCI Mary 215 Refaktoring naruszeń SRP, aby rozwiązać cykl ZALEŻNOŚCI 216 Powszechne strategie przerywania cyklów ZALEŻNOŚCI 220 Ostateczność: przerwanie cyklu za pomocą WSTRZYKIWANIA WŁAŚCIWOŚCIĄ 220 Część 3 Czyste DI 225 7. Kompozycja aplikacji 227 7.1. Komponowanie aplikacji konsolowej 230 Przykład: Uaktualnienie kursu walut przy użyciu programu UpdateCurrency 230 Budowanie PODSTAWY KOMPOZYCJI programu UpdateCurrency 231 Komponowanie grafów obiektów w CreateCurrencyParser 232 Głębsze spojrzenie na warstwy UpdateCurrency 233 7.2. Komponowanie aplikacji UWP 234 Kompozycja UWP 235 Przykład: Podłączanie aplikacji typu gruby klient do zarządzania produktami 235 Implementowanie PODSTAWY KOMPOZYCJI w aplikacji UWP 243 7.3. Komponowanie aplikacji ASP.NET Core MVC 246 Tworzenie własnego aktywatora kontrolera 247 Konstruowanie własnej warstwy middleware przy użyciu CZYSTEGO DI 250 8. Cykl życia obiektu 254 8.1. Zarządzanie CYKLEM ŻYCIA ZALEŻNOŚCI 256 Wprowadzenie ZARZĄDZANIA CYKLEM ŻYCIA 257 Zarządzanie cyklem życia przy użyciu CZYSTEGO DI 261 8.2. Pracowanie z usuwalnymi ZALEŻNOŚCIAMI 264 Konsumowanie usuwalnych ZALEŻNOŚCI 265 Zarządzanie usuwalnymi ZALEŻNOŚCIAMI 269 8.3. Katalog STYLÓW ŻYCIA 275 STYL ŻYCIA SINGLETON 276 PRZEJŚCIOWY STYL ŻYCIA 279 ZAKRESOWY STYL ŻYCIA 281 8.4. Złe wybory STYLU ŻYCIA 287 POJMANE ZALEŻNOŚCI 288 Wybór STYLU ŻYCIA wyciekający do klas konsumujących przez CIEKNĄCE ABSTRAKCJE 290 Powodowanie błędów współbieżności przez łączenie instancji z cyklem życia jednego wątku 297 9. Przechwytywanie 303 9.1. Przedstawienie PRZECHWYTYWANIA 305 Wzorzec projektowy dekorator 306 Przykład: Implementowanie audytowania przy użyciu Dekoratora 311 9.2. Implementowanie ZAGADNIEŃ PRZEKROJOWYCH 314 Przechwytywanie za pomocą wzorca Bezpiecznik 315 Raportowanie wyjątków przy użyciu wzorca Dekorator 321 Zapobieganie nieautoryzowanemu dostępowi do wrażliwej funkcjonalności przy użyciu Dekoratora 323 10. Rozmyślne Programowanie Aspektowe 326 10.1. Wprowadzenie do AOP 327 10.2. Zasady SOLID 330 ZASADA POJEDYNCZEJ ODPOWIEDZIALNOŚCI (SRP) 331 ZASADA OTWARTE/ZAMKNIĘTE (OCP) 332 ZASADA PODSTAWIENIA LISKOV (LSP) 332 ZASADA SEGREGACJI INTERFEJSÓW (ISP) 333 ZASADA ODWRÓCENIA ZALEŻNOŚCI (DIP) 333 Zasady SOLID a PRZECHWYTYWANIE 333 10.3. SOLID jako sterownik dla AOP 334 Przykład: Implementowanie funkcjonalności związanych z produktem przy użyciu IProductService 334 Analiza IProductService z perspektywy SOLID 336 Ulepszanie projektu przez zastosowanie zasad SOLID 339 Dodanie większej liczby ZAGADNIEŃ PRZEKROJOWYCH 353 Wnioski 363 11. Programowanie Aspektowe oparte na narzędziach 367 11.1. Dynamiczne PRZECHWYTYWANIE 368 Przykład: PRZECHWYTYWANIE za pomocą Castle Dynamic Proxy 371 Analiza dynamicznego PRZECHWYTYWANIA 373 11.2. Tkanie w czasie kompilacji 375 Przykład: Zastosowanie aspektu transakcji przy użyciu tkania w czasie kompilacji 377 Analiza tkania w czasie kompilacji 379 Część 4 Kontenery DI 385 12. Wprowadzenie do Kontenera DI 387 12.1. Wprowadzenie do KONTENERÓW DI 389 Odkrywanie API kontenerów rozwiązującego ZALEŻNOŚCI 389 AUTOMATYCZNE PODŁĄCZANIE 392 Przykład: Implementowanie uproszczonego KONTENERA DI, który wspiera AUTOMATYCZNE PODŁĄCZANIE 393 12.2. Konfigurowanie KONTENERÓW DI 401 Konfigurowanie kontenerów za pomocą plików konfiguracyjnych 403 Kontenery konfiguracyjne przy użyciu KONFIGURACJI JAKO KODU 406 Konfigurowanie kontenerów przez konwencję przy użyciu AUTO-REJESTRACJI 409 Mieszanie i dopasowywanie podejść konfiguracji 415 12.3. Kiedy używać KONTENERA DI 416 Używanie bibliotek trzecich oznacza koszty i ryzyko 416 CZYSTE DI daje krótszy cykl feedbacku 419 Werdykt: kiedy używać KONTENERA DI 420 13. Kontener DI Autofac 425 13.1. Wprowadzenie do Autofac 426 Rozwiązywanie obiektów 427 Konfigurowanie ContainerBuilder 430 13.2. Zarządzanie cyklem życia 437 Konfigurowanie zakresów instancji 438 Zwalnianie komponentów 440 13.3. Rejestrowanie trudnych API 443 Konfigurowanie prymitywnych ZALEŻNOŚCI 443 Rejestrowanie obiektów za pomocą bloków kodu 445 13.4. Praca z licznymi komponentami 447 Wybieranie wśród wielu kandydatów 447 Podłączenie sekwencji 452 Podłączanie Dekoratorów 455 Pisanie Kompozytów 458 14. Kontener DI Simple Injector 463 14.1. Wprowadzenie do Simple Injector 464 Tworzenie obiektów 466 Konfigurowanie kontenera 468 14.2. Zarządzanie cyklem życia 476 Konfigurowanie STYLÓW ŻYCIA 477 Zwalnianie komponentów 478 Zakresy otoczenia 481 Diagnozowanie kontenera pod kątem częstych problemów cyklu życia 483 14.3. Rejestrowanie trudnych API 486 Konfigurowanie prymitywnych ZALEŻNOŚCI 486 Wyciąganie prymitywnych ZALEŻNOŚCI do Obiektów Parametrów 488 Rejestrowanie obiektów za pomocą bloków kodu 489 14.4. Praca z licznymi komponentami 490 Wybieranie spośród licznych kandydatów 491 Podłączanie sekwencji 494 Podłączanie Dekoratorów 497 Podłączanie Kompozytów 500 Sekwencje są strumieniami 502 15. Kontener DI Microsoft.Extensions.DependencyInjection 507 15.1. Wprowadzenie do Microsoft.Extensions.DependencyInjection 508 Rozwiązywanie obiektów 510 Konfigurowanie ServcieCollection 512 15.2. Zarządzanie cyklem życia 518 Konfigurowanie STYLÓW ŻYCIA 519 Zwalnianie komponentów 519 15.3. Rejestrowanie trudnych API 522 Konfigurowanie prymitywnych ZALEŻNOŚCI 522 Wyciąganie prymitywnych ZALEŻNOŚCI do Obiektów Parametru 523 Rejestrowanie obiektów za pomocą bloków kodu 524 15.4. Praca z licznymi komponentami 526 Wybieranie wśród licznych kandydatów 526 Podłączanie sekwencji 530 Podłączanie Dekoratorów 533 Podłączanie Kompozytów 537 słowniczek terminologii 545 literatura 549 Pozycje drukowane 549 Pozycje online 550 Inne źródła 551 indeks 553