Jak ustalić, czy wzorzec projektowy jest poprawnie wdrożony?

13

Z powodzeniem mogę skalować wszystkie moje stare aplikacje, które nie korzystały z udokumentowanych wzorców projektowych. Jakikolwiek to jest wzór, nie wiem. W dużej mierze czułem potrzebę użycia prostych koncepcji OOP.

Koncepcja wzorców projektowych jest złożona i trudna do zrozumienia. Po wdrożeniu, jak ustalić, czy implementacja jest poprawna, a aplikacja posiada prawdziwe luźne połączenie?

RPK
źródło
49
Istnieje poważne nieporozumienie dotyczące tego, jakie są wzorce projektowe. Nie są to magiczne wróżki, które posypujesz aplikacją, aby była lepsza. Są to przede wszystkim wspólne słownictwo, aby móc mówić o często używanych sposobach rozwiązywania problemów. Jestem pewien, że jest wiele osób, które „poprawnie wdrażają wzorce” przez cały dzień, nawet nie słysząc o słowie „wzorzec”.
Joachim Sauer,
2
@ JoachimSauer To, co właśnie powiedziałeś, jest rodzajem rzeczy, których uczą uniwersytety techniczne ... Ponieważ jestem studentem, najbardziej mnie to wkurza.
Radu Murzea,
1
@ JoachimSauer Właściwie to nieporozumienie powstaje, ponieważ istnieje wiele technik implementacji tego samego wzorca. Weźmy na przykład MVC i MVP, istnieje tyle odmian co projekty o tym samym wzorze.
RPK,
@RPK +1, sam fakt, że istnieje wiele wzorców MVX (MVC, MVP, MVA, MVVM itp.), Powinien wyraźnie wskazywać, że istnieje wiele równie realnych sposobów robienia rzeczy.
MattDavey,

Odpowiedzi:

3

Aby zachować zwięzłość odpowiedzi, powiedziałbym, że jeśli w kodzie widoczne są następujące cechy, możesz być pewien, że wzorce są na miejscu, nawet jeśli nie podjęłeś świadomych wysiłków (co nie jest problemem) w tym kierunku.

Pożądane cechy:

  1. Twoja baza kodu jest testowalna na poziomie jednostki
  2. Za każdym razem, gdy wdrażasz jakieś zmiany, wprowadzasz zmiany tylko w odpowiednich klasach, które są powiązane w domenie.
  3. Baza kodu nie wykazuje entropii oprogramowania .

Jeśli nadal chcesz zidentyfikować i oznaczyć kod prawdziwymi nazwami wzorów, zaleciłbym wykonanie następujących czynności, aby uruchomić piłkę.

  1. Inżynieria wsteczna bazy kodu, aby wygenerować kilka daigramów UML.
  2. Porównaj wizualnie schematy z dowolnym gotowym odniesieniem do materiału odniesienia wzorów.

To powinno dać ci dobry pomysł.

Sameer Patil
źródło
Czy mógłbyś rozwinąć więcej informacji na temat trzeciego?
Niing
19

Wspominasz zarówno wzorce projektowe, jak i połączenie. To są osobne koncepcje, więc zajmę się nimi osobno. Jedynym prawdziwym połączeniem jest to, że wzorce projektowe mają tendencję do promowania luźnego sprzężenia (ponieważ jest to główny aspekt dobrego projektu).

Wzorce projektowe

Koncepcja Wzorów projektowych jest w rzeczywistości dość prosta: to tylko zestaw szablonów, jak radzić sobie z najczęstszymi problemami. Są 2 główne powody, dla których są popularne:

  1. Są „sprawdzone”: były używane wiele razy, a korzyści / wady każdego z nich są ogólnie znane, w szczególności znane są wszelkie subtelne problemy, które mogą powodować duże problemy.
  2. Zapewniają wspólny zestaw terminologii, a tym samym umożliwiają łatwiejszą komunikację. Jeśli ktoś powie: „klasa X odgrywa rolę obserwatora we wzorcu obserwatora”, programiści znający ten wzorzec mogą natychmiast zrozumieć, co się dzieje.

Skąd wiesz, że poprawnie go wdrożyłeś? To trudne. W przypadku większości wzorów jest to proste - albo go zaśmiewałeś, albo nie. Niektóre wzorce są mniej wyraźne niż inne - np . Kontroler widoku modelu . Takie wzory lepiej wykorzystać jako ogólne wytyczne. Specyfika sposobu jego wdrożenia jest mniej ważna niż zrozumienie przyczyn istnienia wzorca i tego, co ma zostać osiągnięte.

Wzory projektowe nie są „jedyną prawdziwą drogą”. Często musisz albo dostosować je do swoich konkretnych celów, albo czasem nie będzie żadnych wzorów, które pasowałyby do wymagań. Wymuszanie wzoru, który nie pasuje, jest złym pomysłem; to jak używanie naprawdę dobrego młotka, gdy tak naprawdę potrzebujesz śrubokręta.

Sprzęganie

To naprawdę ważny pomysł w informatyce. Ponieważ wymagania dotyczące większości projektów oprogramowania zmieniają się z czasem (czasem znacznie), ważna jest zdolność projektu do radzenia sobie ze zmianami. Sprzężenie jest w zasadzie miarą „jak trudno byłoby wymienić ten komponent na inny?” „Składnikiem” może być metoda, klasa, pakiet, biblioteka itp.

W tym artykule w Wikipedii wymieniono różne typy sprzęgieł .

Vaughandroid
źródło
2

Odpowiedź jest właściwie celem, w którym chcesz pisać wzorce projektowe od samego początku. Dlaczego chcesz elastyczności?

To jest zmiana; wymagania się zmieniają. Spróbuj zmienić coś w swoich wymaganiach, które odzwierciedla zmianę kodu i przekonaj się, jak łatwo to zrobić.

m3th0dman
źródło
-1

Korzystanie z wzorców projektowych jest działaniem zapobiegawczym. Paterny projektowe służą do ułatwienia pracy podczas późniejszego skalowania aplikacji. Oczywiście, aby ułatwić sobie później pracę, musisz teraz wykonać trochę więcej pracy. więc prawdziwe pytanie brzmi: ile zmian możesz się spodziewać w przyszłości i co to za zmiana. Jeśli nie potrzebujesz skalowalności i elastyczności, możesz zrezygnować z wzorców projektowych.

Wzory projektowe same w sobie są implementacją Zasad Projektowania Zorientowanego Obiektowo. Dopóki będziesz przestrzegać tych zasad, twoje aplikacje będą elastyczne i skalowalne; nawet jeśli tak naprawdę nie masz rzeczywistego wzoru. Jak komentował powyżej Joachim Sauer, są to wspólne rozwiązania typowych problemów.

DPD
źródło
2
IMO za pomocą wzorców projektowych nie ma nic wspólnego ze skalowalnością. To po prostu słownictwo pozwalające rozpoznać typowe wzorce w kodzie, abyśmy mogli o nich mówić. Często skalowanie aplikacji może oznaczać sprzeczność z dobrymi projektami na rzecz wydajności.
Adrian Schneider