Zpo-8-wyk-Slajd45: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Introduce Assertion==
==Middle Man==


[[Image:zpo-8-wyk-Slajd45.PNG|Introduce Assertion]]
[[Image:zpo-8-wyk-Slajd45.PNG|Middle Man]]




Wprowadzenie asercji do kodu programu właściwie nie stanowi refaktoryzacji, ponieważ w wyniku tego przekształcenia nie zmienia się struktura kodu, natomiast może zmienić się jego zachowanie (jeżeli asercja okaże się fałszywa). Jednak warto wspomnieć o tej operacji, ponieważ pozwala ona poprawić czytelność i zrozumienie kodu poprzez uwypuklenie pewnych poczynionych niejawnie założeń.
Ten przykry zapach oznacza sytuację, w której cała odpowiedzialność pewnej klasy sprowadza się do delegowania wywołań do innych klas. Jest to zatem sytuacja odwrotna do problemu o nazwie Message Chains – w tamtym przypadku liczba pośrednich odwołań była zbyt mała, w tym – jest zbyt duża. Oczywiście, istnieją sytuacje, w których klasa będąca jedynie tłumaczem jednych metod na drugie ma uzasadnienie (np. wzorzec projektowy Adapter), ale są to wyjątki. Generalnie, klasa-pośrednik posiada zbyt mało odpowiedzialności, aby samodzielnie funkcjonować.
 
Rozwiązanie polega na usunięciu pośrednika, które można wykonać na kilka różnych sposobów. Można zastąpić wywołania poprzez pośrednika wywołaniami bezpośrednimi, co prowadzi do zwiększenia liczby powiązań między klientem (klasą wywołującą) a serwerem (klasą faktycznie obsługującą żądanie). Można usunąć zbędne metody delegujące wewnątrz pośrednika, co jednak jest tylko rozwiązaniem częściowym. Wreszcie, można zastąpić pośrednika dostępnego przez delegację podklasą – czyli zmienić delegowanie wywołań na rzecz ich dziedziczenia i pokrywania. To ostatnie rozwiązanie jest także stosowane przez jedną z wersji wzorca projektowego Adapter.




[[zpo-8-wyk-Slajd44 | << Poprzedni slajd]] | [[zpo-8-wyk-toc|Spis treści ]] | [[zpo-8-wyk-Slajd46 | Następny slajd >>]]
[[zpo-8-wyk-Slajd44 | << Poprzedni slajd]] | [[zpo-8-wyk-toc|Spis treści ]] | [[zpo-8-wyk-Slajd46 | Następny slajd >>]]

Aktualna wersja na dzień 18:14, 4 lis 2006

Middle Man

Middle Man


Ten przykry zapach oznacza sytuację, w której cała odpowiedzialność pewnej klasy sprowadza się do delegowania wywołań do innych klas. Jest to zatem sytuacja odwrotna do problemu o nazwie Message Chains – w tamtym przypadku liczba pośrednich odwołań była zbyt mała, w tym – jest zbyt duża. Oczywiście, istnieją sytuacje, w których klasa będąca jedynie tłumaczem jednych metod na drugie ma uzasadnienie (np. wzorzec projektowy Adapter), ale są to wyjątki. Generalnie, klasa-pośrednik posiada zbyt mało odpowiedzialności, aby samodzielnie funkcjonować.

Rozwiązanie polega na usunięciu pośrednika, które można wykonać na kilka różnych sposobów. Można zastąpić wywołania poprzez pośrednika wywołaniami bezpośrednimi, co prowadzi do zwiększenia liczby powiązań między klientem (klasą wywołującą) a serwerem (klasą faktycznie obsługującą żądanie). Można usunąć zbędne metody delegujące wewnątrz pośrednika, co jednak jest tylko rozwiązaniem częściowym. Wreszcie, można zastąpić pośrednika dostępnego przez delegację podklasą – czyli zmienić delegowanie wywołań na rzecz ich dziedziczenia i pokrywania. To ostatnie rozwiązanie jest także stosowane przez jedną z wersji wzorca projektowego Adapter.


<< Poprzedni slajd | Spis treści | Następny slajd >>