Jaka jest różnica między wzorcami projektowymi a wzorcami architektonicznymi?


119

Kiedy czytamy o wzorcach projektowych w Internecie, zauważamy, że istnieją 3 kategorie:

  • Kreatywne
  • Strukturalny
  • Behawioralne

Ale kiedy tworzymy architekturę oprogramowania, myślimy o MVP, MVC lub MVVM.

Na przykład wśród wzorów kreacyjnych znalazłem wzorzec singleton , ale użyłem również singletona w moim MPV.

Moje pytanie brzmi: czy wzór projektowy jest ogólną strukturą produktu?

  • Jeśli tak, to w jaki sposób singleton może być wzorcem projektowym? Ponieważ mogę go używać w dowolnym miejscu w mojej aplikacji. Zasadniczo ogranicza się do tworzenia w pamięci tylko jednej instancji naraz, ale czy ta koncepcja nie definiuje sposobu projektowania oprogramowania?

  • Jeśli nie, to gdzie są MVP, MVC i MVVM w trzech kategoriach wzorców? Jaka jest różnica między projektem a architekturą oprogramowania?



2
Sprawdź tę listę wzorców projektowych i zasobów wzorców architektonicznych github.com/DovAmir/awesome-design-patterns
dov.amir

Odpowiedzi:


174

Wymaga szczegółowego wyjaśnienia, ale spróbuję naszkicować różnice według mojej najlepszej wiedzy.

Wzory to destylowana wspólność, którą można znaleźć w programach. Pozwala nam na dekonstrukcję dużej złożonej konstrukcji i budowanie z prostych części. Zapewnia ogólne rozwiązanie dla klasy problemów.

Duże, złożone oprogramowanie przechodzi serię dekonstrukcji na różnych poziomach. Na ogół narzędziami są wzorce architektoniczne. Na mniejszym poziomie wzorce projektowe są narzędziami, a na poziomie wdrażania narzędziami są paradygmaty programowania.

Wzór może występować na bardzo różnych poziomach. Zobacz fraktale . Szybkie sortowanie, sortowanie przez scalanie to wszystkie algorytmiczne wzorce organizowania grupy elementów w kolejności.

Aby uzyskać najbardziej uproszczony widok:

  • Paradygmaty programowania - specyficzne dla języka programowania
  • Wzorce projektowe - rozwiązuje powtarzające się problemy w konstrukcji oprogramowania
  • Wzorce architektoniczne - podstawowa organizacja strukturalna systemów oprogramowania

Idiomy to specyficzne dla paradygmatu i języka techniki programowania, które wypełniają szczegóły niskiego poziomu.

Wzorce projektowe są zwykle związane z podobieństwami na poziomie kodu. Zapewnia różne schematy udoskonalania i budowania mniejszych podsystemów. Zwykle ma na to wpływ język programowania. Niektóre wzorce bledną na skutek paradygmatów językowych . Wzorce projektowe to taktyki o średniej skali, które uwydatniają niektóre struktury i zachowania jednostek i ich relacji.

Podczas gdy wzorce architektoniczne są postrzegane jako coś wspólnego na wyższym poziomie niż wzorce projektowe. Wzorce architektoniczne to strategie wysokiego poziomu, które dotyczą komponentów wielkoskalowych, globalnych właściwości i mechanizmów systemu.

Jak uzyskuje się wzory? Przez:

  1. ponowne użycie,
  2. Klasyfikacja
  3. i wreszcie abstrakcja, aby wydestylować podobieństwo.

Jeśli zastosowałeś się do myśli przedstawionych powyżej. Przekonasz się, że Singleton to „wzorzec projektowy”, podczas gdy MVC jest jednym ze wzorców „architektonicznych” służących do rozwiązywania problemów.

Spróbuj przeczytać na:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Bardzo dobrze zrobione i dopracowane. Chciałbym tylko, żeby wszyscy używali tak zróżnicowanych terminów, jak je tutaj umieściłeś. Czy mogę przypiąć wydruk Twojej odpowiedzi na ścianie nad dystrybutorem kawy w naszym dziale marketingu? Może kiedyś zrozumieją. ;-)
ofi

@ofi: Dziękuję! Użycie konstrukcji językowej może nas zarówno wprowadzić w błąd, jak i prowadzić. To jest coś, co uważam za dość potężne.
pyfunc

+3 za
uratowanie

Dobra odpowiedź, dzięki !! jak powiedział @ofi, wydrukuję go i przypię do ściany zespołu projektowego.
rolka

11

Wzorce projektowe to dobrze znane wzorce rozwiązywania problemów technicznych w sposób, który sprawdził się wiele razy. Wzorce projektowe to typowe struktury projektowe i praktyki, które umożliwiają tworzenie oprogramowania obiektowego wielokrotnego użytku. Przykładami wzorców projektowych są wzorzec fabryczny, singleton, fasada, stan itp. Wzorce projektowe mogą być używane do rozwiązywania mniejszych problemów w całej aplikacji i są znacznie łatwiejsze do wstrzyknięcia, zmiany, dodania niż ogólna architektura

wzorce architektury są dobrze znanymi wzorcami do rozwiązywania problemów z architekturą aplikacji. Architektura aplikacji to proces definiowania ustrukturyzowanego rozwiązania, które spełnia wszystkie wymagania techniczne i operacyjne. Architektura aplikacji to ogólna „organizacja” kodu. Przykładami różnych architektur mogą być MVC, MVVM, MVP, n-warstwa (tj. UI-BLL-DAL), itp. Decyzja o architekturze zazwyczaj musi zostać podjęta z góry i często trudno jest ją zmienić po zbudowaniu aplikacji.


1

Elementy architektoniczne skłaniają się ku zbiorom klas lub modułów, ogólnie przedstawianych jako pudełka. Diagramy dotyczące architektury przedstawiają najwyższy poziom patrząc w dół, podczas gdy diagramy klas są na najbardziej atomowym poziomie. Celem wzorców architektury jest zrozumienie, w jaki sposób główne części systemu pasują do siebie, w jaki sposób komunikaty i dane przepływają przez system oraz inne problemy strukturalne. Wzorce architektury wykorzystują różne typy komponentów, z których każdy zazwyczaj składa się z kolejno mniejszych modułów. Każdy komponent jest odpowiedzialny w ramach architektury Wzorce projektowe są wzorcami projektowymi niskiego poziomu lub klasy dla mniejszych cząsteczek aplikacji.

Więcej informacji: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Cóż, w głównej mierze to kwestia języka. Z mojego doświadczenia wynika, że ​​na pograniczu projektowania i architektury, jeśli chodzi o oprogramowanie, jest szeroka rzeka, której szerokość wynika ze stanu wody, na który z kolei wpływają głównie pory roku marketingu. Ogólnie termin „projekt” jest używany z silnym aspektem zachowania produktu oprogramowania, uznanym przez użytkowników końcowych, podczas gdy „architektura” oznacza strukturę techniczną oprogramowania, tj. Komponenty, biblioteki, protokoły i wszystko, czego potrzebuje, aby spełnić projekt. „Wzorce projektowe” pełnią dwie role: po pierwsze są uważane za najlepsze praktyki w rozwiązywaniu kategorii (mniej lub bardziej) standardowych problemów, a nie produktów; 2. pomagają programistom w komunikacji. Pozostając przy przykładzie Singletona, pozwala nam wiedzieć, na czym polega mechanika, używając po prostu słowa, zamiast wyjaśniać za każdym razem, że utworzyliśmy pojedynczą instancję przy użyciu wyznaczonej przestrzeni danych (zmiennej lub czegokolwiek), która jest ustawiona w kontrolowany sposób i gwarantuje, że będzie jedyny, ponieważ chroniliśmy konstruktora klasy itp. Więc IMHO krótka odpowiedź na twoje pytanie brzmi: To zależy od tego, kto mówi. Czy to ma jakiś sens?


0

Wzorce projektowe różnią się od Wzorców Architektonicznych swoim zakresem, są bardziej zlokalizowane, mają mniejszy wpływ na bazę kodu, wpływają na konkretną sekcję bazy kodu, na przykład:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Wzorce architektoniczne mają duży wpływ na podstawę kodu, najczęściej wpływając na całą aplikację poziomo (tj. Jak ustrukturyzować kod wewnątrz warstwy) lub pionowo (tj. Jak żądanie jest przetwarzane z warstw zewnętrznych do warstw wewnętrznych i plecy). Przykłady wzorców architektonicznych: Model-View-Controller, Model-View-ViewModel

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.