Szczegóły ebooka

Koduj jak profesjonalista C#

Koduj jak profesjonalista C#

Jort Rodenburg

Ebook

Znasz już podstawy, zatem przygotuj się na kolejny etap! Kod C# profesjonalnej jakości jest wydajny, czysty i szybki. Niezależnie od tego, czy budujesz aplikacje biznesowe dla użytkowników, czy usługi backendu dla aplikacji Web, oparte na doświadczeniu praktyczne techniki przedstawione w tej książce pozwalają podnieść umiejętności C# na nowy poziom.

Koduj jak profesjonalnista w C# pokazuje, jak pisać czysty kod C#, właściwy dla aplikacji klasy przedsiębiorstwa. Wraz z autorem przejdziesz proces refaktoryzacji odziedziczonej bazy kodu, stosując techniki nowoczesnego C#. Po drodze poznasz takie narzędzia, jak Entity Framework Core, techniki projektowe, takie jak wstrzykiwanie zależności oraz kluczowe praktyki wytwarzania sterowanego testami. Jest to doskonały sposób na zwiększenie już posiadanych umiejętności lub przejścia z innego języka obiektowego do C# i ekosystemu .NET.

Podstawowe zagadnienia:

l Testy jednostkowe i wytwarzanie sterowane testami

l Refaktoryzacja odziedziczonego kodu .NET

l Zasady czystego kodu

l Odpytywanie i manipulowanie bazami danych przy użyciu LINQ i Entity Framework Core

Książka przeznaczona jest dla programistów z doświadczeniem w programowaniu obiektowym. Znajomość C# nie jest wymagana.

Jort Rodenburg jest inżynierem oprogramowania z bogatym doświadczeniem praktycznym, a także wykładowcą i autorem kursów na temat przyśpieszania i usprawniania pracy w C# i .NET.

"Warto przeczytać
kilka razy".

Prabhuti Prakash
Synechron Technologies


"Pełna wskazówek i spostrzeżeń pozwalających szybko wejść w rytm.
Zdecydowanie polecam!"

Edin Kapic, isolutions


"Ta książka naprawdę pomogła mi przejść na następny poziom".

Daniel Vasquez Estupinan
Tokiota


"Takiej właśnie książki szukałem, gdy chciałem nauczyć się pisania lepszego kodu w C#".

Gustavo Filipe Ramos Gomes
Troido


"Uczy świetnych technik i najlpeszych praktyk nowoczesnego programowania w C#".

Foster Haines, J2 Interactive

  • Spis treści
  • przedmowa
  • podziękowania
  • o tej książce
  • o autorze
  • o ilustracji na okładce
  • Używanie C# i .NET
    • Przedstawiamy C# i .NET
      • 1.1 Dlaczego warto pracować w C#?
        • 1.1.1 Powód 1: C# jest ekonomiczny
        • 1.1.2 Powód 2: C# jest łatwy w utrzymaniu
        • 1.1.3 Powód 3: C# jest przyjazny dla dewelopera i łatwy w użyciu
      • 1.2 Kiedy lepiej nie pracować w C#?
        • 1.2.1 Tworzenie systemu operacyjnego
        • 1.2.2 Tworzenie wbudowanych systemów czasu rzeczywistego w C#
        • 1.2.3 Przetwarzanie numeryczne a C#
      • 1.3 Przełączanie się na C#
      • 1.4 Czego można się nauczyć z tej książki
      • 1.5 Czego nie nauczymy się z tej książki
      • Podsumowanie
    • .NET i proces kompilacji
      • 2.1 Czym jest .NET Framework?
      • 2.2 Czym jest .NET 5?
      • Ćwiczenia
      • 2.3 Jak kompilowane są języki zgodne z CLI
        • 2.3.1 Krok 1: Kod C# (wysokiego poziomu)
        • 2.3.2 Krok 2: Common Intermediate Language (poziom asemblera)
        • 2.3.3 Krok 3: Kod natywny (poziom procesora)
      • Ćwiczenia
      • Podsumowanie
  • Istniejąca baza kodu
    • Jak zły jest ten kod?
      • 3.1 Przedstawiamy Flying Dutchman Airlines
      • 3.2 Kawałki układanki: Spojrzenie na wymagania
        • 3.2.1 Mapowanie obiektowo-relacyjne
        • 3.2.2 Punkt końcowy GET /flight: Pobieranie informacji o wszystkich lotach
        • 3.2.3 Punkt końcowy GET /flight/{flightNumber}: Pobieranie informacji o konkretnym locie
        • 3.2.4 Punkt końcowy POST /booking/{flightNumber}: Rezerwowanie lotu
      • 3.3 Uzgadnianie wymagań z istniejącą bazą kodu
        • 3.3.1 Ocena istniejącego schematu bazy danych i jej tabel
        • 3.3.2 Istniejąca baza kodu: pliki konfiguracyjne usługi Web
        • 3.3.3 Badanie modeli i widoków w istniejącej bazie kodu
      • Podsumowanie
    • Zarządzanie zasobami niezarządzanymi!
      • 4.1 FlightController: badanie punktu końcowego GET /flight
        • 4.1.1 Punkt końcowy GET /flight i jego działanie
        • 4.1.2 Sygnatura metody: Znaczenie słów kluczowych ResponseType oraz typeof
        • 4.1.3 Gromadzenie informacji o lotach za pomocą kolekcji
        • 4.1.4 Łańcuchy połączenia, czyli jak doprowadzić inżyniera zabezpieczeń do zawału
        • 4.1.5 Używanie IDisposable do zwalniania niezarządzanych zasobów
        • 4.1.6 Odpytywanie bazy danych za pomocą SqlCommand
      • 4.2 FlightController: Poznajemy GET /flight/{flightNumber}
      • 4.3 FlightController: POST /flight
      • 4.4 FlightController: DELETE /flight/{flightNumber}
      • Ćwiczenia
      • Podsumowanie
  • Warstwa dostępu do bazy danych
    • Konfigurowanie projektu i bazy danych za pomocą Entity Framework Core
      • 5.1 Tworzenie rozwiązania i projektu .NET 5
      • 5.2 Tworzenie i konfigurowanie usługi Web
        • 5.2.1 Konfigurowanie usługi Web .NET 5
        • 5.2.2 Tworzenie i używanie HostBuilder
        • 5.2.3 Implementowanie klasy Startup
        • 5.2.4 Używanie wzorca repozytorium/usługa w architekturze naszej usługi Web
      • 5.3 Implementowanie warstwy dostępu do bazy danych
        • 5.3.1 Entity Framework Core i inżynieria odwrotna
        • 5.3.2 DbSet i przepływ pracy Entity Framework Core
        • 5.3.3 Metody konfiguracji i zmienne środowiskowe
        • 5.3.4 Ustawianie zmiennej środowiskowej w Windows
        • 5.3.5 Ustawianie zmiennej środowiskowej w macOS
        • 5.3.6 Odczytywanie zmiennych środowiskowych w czasie działania programu
      • Ćwiczenia
      • Podsumowanie
  • Warstwa repozytorium
    • Wytwarzanie sterowane testami i wstrzykiwanie zależności
      • 6.1 Wytwarzanie sterowane testami
      • Ćwiczenia
      • 6.2 Metoda CreateCustomer
        • 6.2.1 Dlaczego należy walidować argumenty wejściowe
        • 6.2.2 Używanie wzorca AAA w pisaniu testów jednostkowych
        • 6.2.3 Walidacja pod kątem nieprawidłowych znaków
        • 6.2.4 Włamywanie danych testowych za pomocą atrybutu [DataRow]
        • 6.2.5 Inicjalizatory obiektów i automatycznie generowany kod
        • 6.2.6 Konstruktory, refleksje i programowanie asynchroniczne
        • 6.2.7 Blokady, muteksy i semafory
        • 6.2.8 Wykonywanie synchroniczne do asynchronicznego ciąg dalszy
        • 6.2.9 Testowanie Entity Framework Core
        • 6.2.10 Kontrolowanie zależności przy użyciu wstrzykiwania zależności
      • Ćwiczenia
      • Podsumowanie
    • Porównywanie obiektów
      • 7.1 Metoda GetCustomerByName
        • 7.1.1 Znaki zapytania: typu nullowalne i ich zastosowania
        • 7.1.2 Niestandardowe wyjątki, LINQ i metody rozszerzające
      • 7.2 Kongruencja: od średniowiecza do C#
        • 7.2.1 Tworzenie klasy porównującej przy użyciu EqualityComparer<T>
        • 7.2.2 Testowanie równości poprzez nadpisanie metody Equals
        • 7.2.3 Przeciążanie operatora równości
      • Ćwiczenia
      • Podsumowanie
    • Atrapy, typy ogólne i sprzężenie
      • 8.1 Implementowanie repozytorium Booking
      • 8.2 Walidacja wejścia, rozdzielanie zagadnień i sprzęganie
      • Ćwiczenia
      • 8.3 Używanie inicjalizatorów obiektów
      • 8.4 Testy jednostkowe z użyciem atrap
      • 8.5 Programowanie przy użyciu typów ogólnych
      • 8.6 Dostarczanie domyślnych wartości argumentów przy użyciu parametrów opcjonalnych
      • 8.7 Wyrażenia warunkowe, typ Func i przełączniki
        • 8.7.1 Trójargumentowy operator warunkowy
        • 8.7.2 Rozgałęzianie wykonania przy użyciu tablicy funkcji
        • 8.7.3 Instrukcje i wyrażenia switch
        • 8.7.4 Odpytywanie o oczekujące zmiany w Entity Framework Core
      • Ćwiczenia
      • Podsumowanie
    • Metody rozszerzające, strumienie i klasy abstrakcyjne
      • 9.1 Implementowanie repozytorium Airport
      • 9.2 Pobieranie lotniska z bazy danych na podstawie przekazanego identyfikatora
      • 9.3 Walidacja parametru wejściowego AirportID
      • 9.4 Strumienie wyjściowe i zapewnienie odpowiedniej abstrakcji
      • 9.5 Odpytywanie bazy danych o obiekt Airport
      • 9.6 Implementowanie repozytorium Flight
        • 9.6.1 Metoda rozszerzająca IsPositive oraz magiczne liczby
        • 9.6.2 Pobieranie obiektu lotu z bazy danych
      • Ćwiczenia
      • Podsumowanie
  • Warstwa usługi
    • Refleksja i imitacje
      • 10.1 Powrót do wzorca repozytorium/usługa
        • 10.1.1 Jakie jest zastosowanie klasy usługi?
      • Ćwiczenia
      • 10.2 Implementowanie klasy CustomerService
        • 10.2.1 Konfigurowanie przypadku sukcesu: tworzenie klas szkieletowych
        • 10.2.2 Jak usunąć swój własny kod
      • Ćwiczenia
      • 10.3 Implementowanie BookingService
        • 10.3.1 Testy jednostkowe przekraczające granice pomiędzy warstwami architektury
        • 10.3.2 Różnica pomiędzy stubem a mockiem
        • 10.3.3 Imitowanie klasy za pomocą biblioteki Moq
        • 10.3.4 Wywoływanie repozytorium z poziomu usługi
      • Ćwiczenia
      • Podsumowanie
    • Sprawdzanie typów w czasie działania i obsługa błędów spojrzenie drugie
      • 11.1 Walidacja parametrów wejściowych metody warstwy usługi
        • 11.1.1 Sprawdzanie typów w czasie działania przy użyciu operatorów is i as
        • 11.1.2 Sprawdzanie typu za pomocą operatora is
        • 11.1.3 Sprawdzanie typów przy użyciu operatora as
        • 11.1.4 Co zrobiliśmy w punkcie 11.1?
      • 11.2 Sprzątanie klasy BookingServiceTests
      • 11.3 Ograniczenia klucza obcego w klasach usługowych
        • 11.3.1 Wywoływanie repozytorium Flight z klasy usługowej
      • Ćwiczenia
      • Podsumowanie
    • Stosowanie IAsyncEnumerable<T> oraz yield return
      • 12.1 Czy potrzebujemy klasy AirportService?
      • 12.2 Implementowanie klasy FlightService
        • 12.2.1 Uzyskiwanie informacji o lotach z FlightRepository
        • 12.2.2 Łączenie dwóch strumieni danych w widok
        • 12.2.3 Używanie słów kluczowych yield return w blokach kodu try-catch
        • 12.2.4 Implementowanie metody GetFlightByFlightNumber
      • Ćwiczenia
      • Podsumowanie
  • Warstwa kontrolera
    • Oprogramowanie pośrednie, trasy HTTP i odpowiedzi HTTP
      • 13.1 Klasy kontrolerów w ramach wzorca repozytorium/usługa
      • 13.2 Ustalanie, które kontrolery trzeba zaimplementować
      • 13.3 Implementowanie klasy FlightController
        • 13.3.1 Zwracanie odpowiedzi HTTP przy użyciu interfejsu IActionResult (GetFlights)
        • 13.3.2 Wstrzykiwanie zależności do kontrolera za pomocą middleware
        • 13.3.3 Implementowanie punktu końcowego GET /Flight/{FlightNumber}
      • 13.4 Kierowanie żądań HTTP do kontrolerów i metod
      • Ćwiczenia
      • Podsumowanie
    • Serializacja i deserializacja JSON oraz niestandardowe wiązanie modelu
      • 14.1 Implementowanie klasy BookingController
        • 14.1.1 Wprowadzenie do deserializacji danych
        • 14.1.2 Używanie atrybutu [FromBody] do deserializacji przychodzących danych HTTP
        • 14.1.3 Użycie niestandardowego wiązania modelu i atrybutu metody dla wiązania
        • 14.1.4 Implementowanie logiki punktu końcowego w metodzie CreateBooking
      • 14.2 Testy akceptacyjne i middleware Swagger
        • 14.2.1 Ręczne wykonywanie testów akceptacyjnych na podstawie specyfikacji OpenAPI
        • 14.2.2 Generowanie specyfikacji OpenAPI w czasie działania programu
      • 14.3 Koniec podróży
      • Podsumowanie
  • Odpowiedzi do ćwiczeń
  • Lista kontrolna czystego kodu
  • Wskazówki instalacyjne
  • OpenAPI FlyTomorrow
  • Lista lektur
    • Polecamy także
  • Tytuł: Koduj jak profesjonalista C#
  • Autor: Jort Rodenburg
  • ISBN: 978-83-7541-459-2, 9788375414592
  • Data wydania: 2022-03-17
  • Format: Ebook
  • Identyfikator pozycji: e_2nxd
  • Wydawca: Promise