what's the problem?
Czasami zdarza nam się zauważyć w kodzie metody, które posiadają takie same deklaracje. Jest to nieuniknione, dziesiątki, setki i więcej tysięcy linii kodu sprawia, że niekiedy "powtórzenia" tego typu się zdarzają.Dlaczego "powtórzenia" w cudzysłowie? Ponieważ nie jest to wynik duplikacji logiki, a jedynie użycia języka w celu opisania danej funkcjonalności. Tylko czy rzeczywiście nie jest?
keep digging...
Mimo tego, że we wstępie napisałem, że taka deklaracja wynika jedynie z przypadku, to czy jest tak w rzeczywistości?Czy jeżeli metody posiadają taką samą nazwę i typ zwracany (bądź jego brak), to czy nie możemy przypuszczać, że w logice również istnieje jakieś podobieństwo? W końcu programowanie obiektowe ma na celu odwzorowanie rzeczywistości, a w prawdziwym świecie czynności, które określamy w ten sam sposób również mają jakąś część wspólną np. o sobie, samochodzie, samolocie itp. mogę powiedzieć, że się poruszamy i choć robimy to na różne sposoby, to cel jest ten sam - dotrzeć do wybranego miejsca.
No dobrze, może i rzeczywiście logicznie wcale nie są całkowicie rozłączne, ale cóż z tego skoro są używane w różnych miejscach, w miejscach, w których wiadomo, że używany obiekt jest instancją konkretnej klasy, więc na cóż by mi się interfejs przydał?
To kopmy dalej:) Skoro istnieje podobieństwo w logice, a deklaracje są identyczne, to czy jest szansa na to, aby miejsca użycia (kod w tych miejscach) również był podobny? Jest, i szczerze mówiąc, wydaje mi się, że nawet spora:) O procesie wyłapywania takich podobieństw i wyciągania ich wyżej pisałem już tutaj, więc ten etap pominę w tym wpisie.
what is the conclusion?
Nie tylko zauważone podobieństwa w kodzie mogą być podstawą do tworzenia rozwiązań niezależnych od konkretnych klas, a interfejsów. Czasami wystarczy deklaracja. Nazwy metod mogą nawet odrobinę się różnić, a to dlatego, że opisujemy je językiem, którym się porozumiewamy na co dzień, a to sprawia, że do wyrażenia jednej czynności możemy wykorzystać wiele słów.Warto jednak zwracać uwagę na takie podobieństwa ponieważ niekiedy powtórzenie nie oznacza takiego samego kodu (tą samą funkcjonalność można przecież zrealizować na wiele sposobów), a "jedynie" podobne/takie same działanie.
Dobrze jest takie podobieństwa wychwytywać już na etapie projektowania, ponieważ dzięki temu zaoszczędzimy trochę czasu, który w innym wypadku będziemy musieli "stracić" podczas refaktoryzacji.
Brak komentarzy:
Prześlij komentarz