Co prawda będą musieli może nawet kilkakrotnie reagować na zmiany w interfejsie naszego systemu, ale korzyść ze zrównoleglenia prac, a zwłaszcza postępy współpracowników w rozwijaniu implementacji wewnętrznych elementów ich podsystemów, niemających związku z naszym kawałkiem projektu, mogą zre-kompensować koszty zmian interfejsu. Dodatkowe zalety tego podejścia ujawnią się w następnym przykładzie. Fasada dla przeróbek Pora na kolejne zastosowanie wzorca Façade, pozornie dość podobne do fasady dla systemów w budowie. Otóż kiedy znajdziemy się w potrzebie „refaktoryzacji” całego podsystemu, w naszym projekcie powinniśmy rozważyć zastosowanie fasady refaktoryzacji jako środka oddzielenia „dobrego” kodu, który ma pozostać niezmieniony, od „złego” kodu, który ma być przerobiony. Typowo w czasie przerabiania systemu dochodzi do wprowadzania licznych zmian w interfejsach różnych klas, co potencjalnie wymusza znaczące zmiany w interfejsie systemu jako całości. Wyobraźmy sobie, że dostaliśmy w spadku po poprzednikach dość przestarzały system efektów cząsteczkowych i stoimy przed zadaniem przerobienia go i uruchomienia tak, aby współdziałał z licznymi, znacznie nowszymi systemami gry. Zastany system może nie posiadać elementów i funkcji oczekiwanych w nowym środowisku albo po prostu nie spełniać wszystkich wymagań narzucanych przez projekt gry. Trzeba więc przepisać („refaktoryzować”, kiedy rozmawia się z szefem) liczne klasy w zastanym systemie, dodać do niego nowe klasy i pozbyć się niektórych niepotrzebnych. Oczywiście całe otoczenie podsystemu natychmiast przestanie działać, przez co koledzy rozwijający inne podsystemy, uzależnione od systemu efektów cząsteczkowych, zostaną zatrzymani w swoich pracach. Mamy wtedy dwie opcje. 190 Część II ♦ Wydobywanie mocy C++ Pierwsza to dłubanina i orka w zastanym systemie, która czasowo całkowicie blokuje jakiekolwiek korzystanie z efektów cząsteczkowych w grze. Wynikły z tego przestój w rozwoju projektu może dotyczyć niemal każdego programisty w zespole, od programistów podsystemu graficznego, którzy muszą mieć na oku inwentarz cząsteczkowy, przez artystów, którzy chcieliby móc testować różne nowe tekstury, po projektantów poziomów, którzy chcieliby, żeby ich dzieła działały. Nawet jeśli z początku wydaje się, że uda się przerobić system dość szybko, zawsze jest ryzyko nieprzewi-dzianych trudności i opóźnień w przywróceniu kodu do stanu używalności. Czasem najgorsze, co się może przytrafić projektowi, to właśnie wzięcie działającego podsystemu, który kierownictwo i wydawca uznali za działający, i zablokowanie dostępu do niego. Z punktu widzenia osób niezaangażowanych w projekt konieczność przerobienia podsystemu oznacza nie postęp, ale regres całego projektu. Dla kontynuacji projektu najlepiej jest, jeśli w każdym momencie można „czynnikom decyzyjnym” pokazać możliwie dużo działającego kodu i możliwie wiele chociaż jako tako spraw-nych podsystemów. Weźmy więc pod rozwagę drugą możliwość: ustanowienie wzorca Façade jako tymczasowego interfejsu, który udostępniałby zarówno nowe funkcje i elementy podsystemu, jak i te, które zostaną pozostawione ze starego. Zazwyczaj wiadomo już, jakie cechy ma reprezentować nowy system (od czego są regularne konsultacje z projek-tantami?), więc ów tymczasowy interfejs, fasada dla przeróbek napisze się właściwie sama. Następny krok będzie polegał na zastosowaniu fasady jako otoczki dla zacho-wywanych funkcji przerabianego podsystemu. Pozwoli to podtrzymać dostępność za-chowywanych elementów na czas, kiedy system będzie przerabiany. A wszystkie nowe funkcje i elementy również powinny być udostępniane poprzez tymczasową fasadę. Po wdrożeniu fasady dla przeróbek (co nie powinno zająć dużo czasu) można już swobodnie kontynuować prace nad „wnętrznościami” nowego systemu, a wszyscy inni będą mogli cieszyć się niezakłóconą dostępnością tak im potrzebnych cząsteczek. Do czasu dokończenia systemu okaże się zapewne, że fasada zamieniła się w solidnego menedżera systemu efektów cząsteczkowych (to prawdopodobne zwłaszcza wtedy, kiedy już na początku miało się takie plany). Ale nawet jeśli nie, można szybko zwalić fasadę i odsłonić światu kompletny, nowy interfejs systemu; wymuszony tym przestój nie powinien być dłuższy niż kilka godzin. Wzorzec Observer
|