Różnica między wzorem a zasadą

20

Jaka jest różnica między wzorami projektowania obiektowego a zasadami? Czy to są różne rzeczy? O ile rozumiem, obaj starają się osiągnąć jakiś wspólny cel (np. Elastyczność). Czy mogę więc powiedzieć, że wzór jest zasadą i odwrotnie?

Zasada projektu = SOLID (tj. Zasada inwersji zależności)

Wzór projektowy = Gof (tj. Abstrakcyjny wzór fabryczny)

Chandi Gorom
źródło

Odpowiedzi:

24

Nie, to nie to samo.

Wzorce są powszechnymi rozwiązaniami problemów programowania obiektowego . (Nie znam żadnych podobnych książek do programowania funkcjonalnego lub deklaratywnego.) Idea została skrystalizowana w słynnej książce „Design Patterns” autorstwa Gang of Four w 1995 roku.

Jak podkreśla Andre, wzorce są wspólne w każdym paradygmacie. Powtórzę moje poprzednie stwierdzenie: Nie znam żadnych podobnych książek do programowania funkcjonalnego lub deklaratywnego, ale Andre usunął moją ignorancję za pomocą linku, który podał poniżej. (Dziękuję Andre.)

Zasady mniej dotyczą konkretnych języków lub paradygmatów, a bardziej ogólnie. „Don't Repeat Yourself” - zasada DRY - dotyczy wszystkich programów.

duffymo
źródło
4
Wzory istnieją w każdym paradygmacie. Jeremy Gibbons pisze książkę o nazwie Patterns in Functional Programming (i bloguje o tym tutaj ). Wzory są dokładnie tym, co mówi nazwa - powtarzające się projekty, które rozwiązują podobne problemy. Są wszędzie, choć nie zawsze możesz je rozpoznać.
André Paramés,
@ AndréParamés Szybkie przeglądanie prowadzi mnie do przekonania, że ​​Jeremy Gibbons mówi o idiomach językowych , a nie o wzorach projektowych.
Izkata
@Izkata Non-OOP Design Patterns?
Roc Martí
19

Te pojęcia nie są takie same:

* Zasada projektowania: * Zasady projektowania oprogramowania stanowią zbiór wytycznych, które pomagają nam uniknąć złego projektu. jak: Zasada otwartego zamknięcia

* Wzorzec projektowy: * Wzorzec projektowy jest ogólnym rozwiązaniem wielokrotnego użytku dla często występującego problemu w danym kontekście w projektowaniu oprogramowania. Jak: Singleton

Jennifer S.
źródło
7

Wzorce są zgodne z zasadami, jakie są implementacje wzorców.

Zasadą byłaby „pośrednia”, którą można by osiągnąć poprzez wzorzec „fabryczny”, który ostatecznie jest implementowany jako klasa metodami fabrycznymi.

K ..
źródło
3

Zasady są zasadami, a wzorce są ich konkretnymi przykładami.

Ahmad
źródło
1
czy możesz podać kilka przykładów?
Poinformuj nas o zasadzie, która wymaga Fabryki lub Łańcucha Odpowiedzialności lub Flyweight.
duffymo
2
@duffymo Well Factory na przykład przestrzega zasady inwersji zależności (nie iniekcji); zarówno klient, jak i instancja zależą od abstrakcji - interfejsu. Łańcuch odpowiedzialności opiera się na zasadach luźnego sprzęgania i rozdzielania układów sterowania. Uważam, że Flyweight ma tylko wzrost wydajności.
m3th0dman
3

Wzory są bardziej rzeczami wyższego poziomu niż zasadami. Wzorce rozwiązują określone problemy. Zasady mogą być stosowane w dowolnym miejscu, niezależnie od kontekstu. Właściwie wzorce oparte na zasadach (SRP, DRY itp.)

EG Pozwala spojrzeć na wzór strategii. Definiuje rodzinę algorytmów, hermetyzuje każdy z nich i czyni je wymiennymi. Masz tutaj wysokopoziomową koncepcję algorytmu. Wzorzec stanu zapewnia wysokopoziomową koncepcję stanu. Zgodnie z zasadami nie masz żadnych koncepcji wysokiego poziomu. Zasady to bloki konstrukcyjne, które stosowane są przez wzór do osiągnięcia celu. Podczas wdrażania wzorca strategii używasz SOLID:

  • SRP - definiujesz kod odpowiedzialny za algorytm i wyciągasz go z innego kodu.
  • OCP - definiujesz abstrakcję, która reprezentuje wszystkie różne algorytmy i używasz jej
  • LSP - nie używasz konkretnych klas algorytmów w kodzie klienta, a jedynie abstrakcję
lazyberezovsky
źródło
5
W rzeczywistości wzorce są na niższym poziomie niż zasady. To znaczy, że wzorzec jest bliższy faktycznej realizacji niż zasada w tym kontekście. Innymi słowy, zasady są bardziej abstrakcyjne niż wzorce, przy czym zasady oznaczają ogólne wytyczne projektowe i wzorce reprezentujące rozwiązania odpowiednie dla określonej klasy problemów.
@Jarkko zobacz mój przykład. Kiedy mówiłem o poziomie, miałem na myśli, że wzorce oparte są na zasadach, a nie odwrotnie. Cegła nie jest bardziej rzeczą wyższego poziomu niż budowanie.
4
Rozumiem, co miałeś na myśli, i rozumiem twoje zdanie na ten temat. Jest to jednak sprzeczne ze wspólnym znaczeniem pojęć „wysoki poziom” i „niski poziom” w kontekście oprogramowania. (Z jakiegoś powodu nie mogę cię @ oznaczyć.)
1
„Wzory są bardziej rzeczami wyższego poziomu niż zasadami”. Zaczynam się różnić ==> Wzór jest bliski realizacji (tzn. Niski poziom), podczas gdy zasadą jest zasada wysokiego poziomu.
Raúl,
2

Wzory zostały pierwotnie udokumentowane dla architektury. W architekturze stosuj takie rzeczy, jak umieszczenie drzwi w pokoju lub układ wioski.

Gang of Four zastosował ten pomysł do programowania obiektowego. Może istnieć więcej niż jeden wzorzec, którego można użyć do rozwiązania problemu, ale każdy wzorzec będzie miał określoną implementację. Wzorce istnieją w innych podejściach programistycznych, ale nie znam żadnych odpowiednich książek. Jak wspomnieli inni Wzory obejmują konkretne wdrożenia. Używanie wzorca, gdy się nie stosuje, jest często uważane za anty-wzorek.

Zasady nie obejmują wdrażania, chociaż mogą istnieć standardowe podejścia do wdrażania. Zasady dotyczą raczej zagadnień ogólnych, a nie konkretnych problemów. W przypadku Inversion of Control mam świadomość co najmniej trzech podejść do wdrożenia. W przypadku DRY (Don't Repeat Yourself) nie wiem o konkretnym podejściu do implementacji, chociaż używam kilku.

Rozważać

  • Poproszono Cię o użycie Wzoru takiego jak Abstrakcyjny Wzorzec Fabryczny jako jedynego podejścia do opracowania programu. Czy byłoby to właściwe? Nie, to jest bardziej prawdopodobne, że jest Wzorem.
  • Czy zostałeś poproszony o zastosowanie SUCHEGO do wszystkich komponentów? Czy byłoby to właściwe? Tak, to jest bardziej prawdopodobne, że będzie to Zasada.
BillThor
źródło
1

Zasada projektowania OO—

Zasada OO to zbiór wytycznych, które zapewniają koncepcję OOP. W oparciu o koncepcję OOP określa to sposoby lepszego projektowania, lepszego projektowania. Podstawową zasadą projektowania OO jest SOLID.

Wzorzec projektowy stanowi ogólne rozwiązanie problemu projektowego. Uwaga: „wzorzec projektowy” można również zastosować do słowa obiektowego w południe. Tak więc wzorce projektowe OO (OODP) to te, które zapewniają ogólne rozwiązanie zasady obiektowej projektowania obiektowego opartej na projektowaniu. Wzory projektowe są odkryte, a nie wynalezione. Istnieje kilka sposobów definiowania OODP, a najbardziej znany to BSC [Behavioural Structural Creational].

Poniżej znajduje się link do szczegółowych wyjaśnień. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
źródło