130 likes | 303 Views
Programowanie Defensywne (Defensive Programming) w C#. Mariusz Świetliński PJWSTK. 100110001001110010L1O0T10101O0F00100101C1O1D0E11000110100101011101001000101010101001. Metody Warunkowe (Conditional Methods). Doklejamy warunek Warunek decyduje o przetworzeniu Decyzja w momencie kompilacji
E N D
Programowanie Defensywne(Defensive Programming)w C# Mariusz ŚwietlińskiPJWSTK 100110001001110010L1O0T10101O0F00100101C1O1D0E11000110100101011101001000101010101001
Metody Warunkowe(Conditional Methods) • Doklejamy warunek • Warunek decyduje o przetworzeniu • Decyzja w momencie kompilacji • Przydatne przy sprawdzaniu • Ułatwiają proces tworzenia oprogramowania • Finalna wersja ich nie przetwarza (nie wymaga to ponownej kompilacji) • Atrybut: Conditional
Klasy Trace i Debug • Przestrzeń nazw System.Diagnostics • Obie klasy implementują te same funkcjonalności • Mają odrobinę inne zastosowanie
Klasa Trace • Pomaga śledzić (trace) proces wykonywania kodu (code execution) • Wykorzystywana w kodzie opublikowanym (release code) • Nie powinno się nadużywać ze względu na wydajność
Klasa Debug • Pomaga przy debugowaniu (debug) kodu • Nie powinno się używać w kodzie wydanym (release code) • Przydatna przy wszelkiego rodzaju sprawdzeniach przy tworzeniu oprogramowania
Asercje (Asserts) • Sprawdza podany warunek i jeśli przyjął on wartość false, to wypisuje podaną wiadomość • Mechanizm daje możliwość upewnienia się że oczekiwane warunki są spełnione • Kolekcja słuchaczy (listeners) • Przydatne w złożonych projektach
Wyjście (output) w klasach Trace i Debug • Komunikaty wysyłamy do słuchaczy (listeners) • Metody piszące zawsze: • Write() • WriteLine() • Metody z warunkiem (jeśli true, to pisz): • WriteIf() • WriteLineIf()
BooleanSwitch i TraceSwitch • Poprzednie rozwiązanie oparte było o zmienną typu bool • Decyzja o tym czy pisać do dziennika (logging) wyciągnięta na zewnątrz kodu • Pliki konfiguracyjne aplikacji (application configuration file)
BooleanSwitch • Opakowanie zmiennej typu bool • Automatyczne ustawianie z pliku konfiguracyjnego aplikacji
TraceSwitch • Więcej możliwości niż zmienna typu bool • Wielopoziomowa logika zapisów do dziennika (logging) • Sterowanie stopniem szczegółowości • Automatyczne zawieranie niższych poziomów
Własny Switch • Własne poziomy szczegółowości • Dziedziczymy po klasie System.Diagnostics.Switch • Dlaczego nie działa?