Wskazówki projektowe Programowanie Obiektowe Mateusz Cicheński
Przydatne zasady SOLID Wzorce struktury aplikacji MVC MVP MVVM Metody wytwarzania oprogramowania Manifest Zwinnego Wytwarzania Oprogramowania Scrum TDD Przydatne odnośniki Plan zajęć
S O L I D RP CP SP SP IP Przydatne zasady
S O L I D RP CP SP SP IP Każda klasa jest odpowiedzialna za jedną rzecz. vs Single responsibility principle
S O L I D RP CP SP SP IP Klasa jest otwarta na rozszerzenia, ale zamknięta na modyfikacje. Open/closed principle
S O L I D RP CP SP SP IP Jeśli klasa S jest podklasą T, to obiekty klasy T mogą być podmienione przez obiekty klasy S bez wpływu na działanie aplikacji. vs Liskov substitution principle
S O L I D RP CP SP SP IP Interfejsy powinny definiować minimalny zbiór metod zapewniających spójną funkcjonalność. vs Interface segregation principle
S O L I D RP CP SP SP IP 1. Moduły wysoko-poziomowe nie powinny zależeć od modułów niskopoziomowych. Jedne i drugie powinny bazować na abstrakcji. 2. Abstrakcje nie powinny zależeć od szczegółowych rozwiązań. Szczegółowe rozwiązania powinny zależeć od abstrakcji. Dependency inversion principle
Jeśli w jednym pokoju spotka się 10 architektów aplikacji i każesz im omówić 1 wybrany wzorzec struktury aplikacji, to choćbyś nie wiem jak się starał uzyskasz 12 różnych definicji 10 x 1 = 12 matematyka architektów aplikacji Wzorce struktury aplikacji
APLIKACJA jest widoczne dla używa Użytkownik Najprościej i bez pomysłu
MODEL WIDOK zarządza KONTROLER Użytkownik Model View Controller
Użytkownik jest widoczne dla wchodzi w interakcje WIDOK przekazuje interakcje aktualizuje PREZENTER MODEL używa Model View Presenter
MODEL WIDOKU WIDOK MODEL Użytkownik Model View ViewModel
Ułatwiają pracę w zespole Umożliwiają kontrolę postępów pracy Organizują pracę zespołu Realizują wszystkie etapy związane z wytwarzaniem aplikacji, tj.: Zebranie wymagań Projekt aplikacji Implementacja Testowanie Wytworzenie produktu finalnego Metody wytwarzania oprogramowania
Ludzie i ich wzajemne interakcje (współdziałanie) ponad procedury i narzędzia. Działające oprogramowanie nad wyczerpującą dokumentację. Współpraca z klientem nad negocjację umów. Reagowanie na zmiany ponad realizowanie planu. Manifest Agile
Role: zespół, klient, scrum master Product Backlog = spis wymagań w postaci historyjek (INVEST independent, negotiable, valuable, estimable, small and testable) Sprint Backlog = lista wymagań uwzględnionych w danym przyroście (sprincie) Sprint = przedział czasowy, w ramach którego powinien powstać nowy produkt realizujący wybrane funkcjonalności (zazwyczaj to 2 do 4 tygodni) Scrum
Spotkanie dzienne Ograniczone czasowo (max 15 minut) Obecność całego zespołu Co zostało zrobione wczoraj, co zostanie zrobione dzisiaj, czy wystąpiły jakieś problemy? Przygotowanie Backlogu Ograniczone czasowo (max 1 godzina) Służy analizie historii i ich ewentualnemu podziałowi na mniejsze historie Planowanie sprintu Ograniczone czasowo (max 8 godzin) Wybranie historii z Backlogu = utworzenie Sprint Backlogu z uwzględnieniem czasu wykonania zadań Scrum c.d.
Podsumowanie sprintu Określenie co zostało zrobione, a co nie Przedstawienie nowej wersji oprogramowania klientowi Spotkanie retrospektywne Co poszło dobrze/sprawnie w poprzednim sprincie? Co może zostać poprawione przy realizacji kolejnego sprintu? Scrum c.d.
Etap 1: sformułowanie funkcjonalności w postaci testu jednostkowego Etap 2: upewnienie się, że test zakończy się niepowodzeniem Etap 3: implementacja nowej funkcjonalności Etap 4: upewnienie się, że test zakończy się powodzeniem Etap 5: refaktoryzacja kodu Etap 6: wróć do Etapu 1 Test Driven Development
Struktura dobrego testu: 1. przygotowanie systemu 2. uruchomienie testu 3. walidacja rezultatów 4. posprzątanie po sobie Testy powinny być niezależne od siebie! Testy powinny być powtarzalne! Nie oczekuj dokładnych wyników dla testów wydajności lub czasu wykonania Testując wartości zależne od zewnętrznych czynników uwzględnij pewien margines błędu (np. przy pomiarze czasu) Porównuj tylko wartości istotne dla danego testu TDD dobre praktyki
TDD http://www.junit.org/ SVN http://subversion.apache.org/ http://tortoisesvn.tigris.org/ Bug tracker http://trac.edgewall.org/ http://www.mantisbt.org/ Projektowanie obiektowe http://wazniak.mimuw.edu.pl/index.php?title=zaaw ansowane_projektowanie_obiektowe Przydatne odnośniki