it-swarm-eu.dev

Jsou designové vzory v dnešní době opravdu zásadní?

Četl jsem „Coders at Work“ a čelili skutečnosti, že někteří z odborníků, s nimiž se v knize dotazovali, nejsou tak nadšeni návrhovými vzory.

Myslím, že existují dva hlavní důvody:

  1. Designové vzory nás nutí myslet na ně. Jinými slovy, je téměř nemožné vymyslet něco nového (možná lepšího).

  2. Designové vzory netrvají věčně. Jazyky a technologie se rychle mění; proto se návrhové vzory nakonec stanou irelevantní.

Možná je tedy důležitější naučit se, jak správně programovat bez zvláštních vzorců, a ne je učit.

Jde také o to, že obvykle, když lidé čelí problému a nemají moc času, snaží se použít vzorec. To znamená zkopírovat a vložit existující kód do projektu s malými změnami, aby byl funkční. Když je čas něco změnit nebo přidat, vývojář neví, kde začít, protože to není jeho kód a není s ním hluboce obeznámen.

112
Sergey

Za své peníze si myslím, že každý postrádá smysl pro návrhové vzory. Je vzácné, že sedím a přemýšlím, jaký vzorec bych měl použít v dané situaci. Také jsem většinu těchto vzorců používal dlouho předtím, než jsem věděl, že mají jména.

Síla návrhových vzorů je v komunikaci. Je pro mě mnohem rychlejší říci „za tím použít strategii“, než popsat podrobně to, co navrhuji. Je pro nás mnohem snazší diskutovat o výhodách modelů tukové domény vs. skriptů transakcí, pokud všichni víme, co tyto dva pojmy znamenají. A tak dále.

A nejsilněji ze všech, pokud jsem pojmenoval třídu FooBuilder, pak víte, že používám Builderův vzor k vygenerování mého Foo.

I když nevíte, o čem mluvím, když řeknu „Vzorec pozorovatelů je pro to ideální“, budete si moci docela snadno odjet a google.

V tomto smyslu se síla návrhových vzorů nikdy nezmizí.

264
pdr

Vzory slouží dvěma primárním účelům:

  • Předvídatelné vyřešení napětí: Vzory jsou navrženy tak, aby vyřešily určitou sadu napětí způsobem, o kterém je známo, že funguje. Kent Beck, autor Smalltalk Best Practice Patterns , popisuje vzory jako způsob, jak zopakovat rozhodnutí, které by odborník učinil za podobných okolností. Dokud napětí zůstane stejné (a často ano), vzorce, které je vyřeší, zůstanou užitečné.

  • Komunikační síla multiplikátor: Vzory nám umožňují říci hodně s trochou. Využívají malou sadu výkonných, dobře srozumitelných konceptů, které lze použít v celé řadě problémových prostorů. @ pdr odpověď je mrtvá na komunikační hodnotu vzorů.

15
Rein Henrichs

Domnívám se, že tvrzení, že designové vzory brání inovacím, je zcela nepravdivé. Měli byste vědět, kde už existuje, takže nemusíte kolo znovu objevovat. Aby byly vzory dočasné, platí pro systémy OOP) a nejsou propojeny s žádnou konkrétní platformou nebo jazykem.

Nyní se mi nelíbí, když lidé mluví o vzorcích, že někteří lidé mají s nimi určitou posedlost. Jednou jsem měl klienta, aby mě požádal, „abych zahrnul alespoň dva další vzory“ (WTF ?!), protože kvůli nedostatku buzzwords v mém kódu to nevypadalo dostatečně podnikavě.

12
Vitor Py

Možná koncept anti-vzory je německý. Nemyslím si, že studuji návrhové vzory jako kritický krok k tomu, abych se stal softwarovým inženýrem. Softwarový design je důležitý, často vyhrazený jako privilegium softwarového architekta na projektu, ale realisticky něco, co může být vyvráceno konsensem v příslovečném „dobře gelovaném“ týmu.

Zdrojem pro tyto diskuse však jsou designové vzory a anti-vzory. Je třeba ocenit lekce věcí, které fungovaly dobře (nebo ne) a jak vydělat (nebo zmírnit) důsledky výběru designu. Dobrý tým by mohl přijít s vlastní slovní zásobou pro takové diskuse, ale opravdu není tak špatné odkazovat na defacto standardy vypracované autory, kteří Byl jsem tam, udělal jsem to.

6
hardmath

Existují dva druhy vzorů:

  1. niverzální vzory, což je mnohem více o tom, jak organizovat složité programy, abyste jim vůbec rozuměli. Tito neodcházejí, i když jich lze najít více.
  2. Situační vzory, které jsou tak svázány s konkrétními silami vyvolanými omezeními (např. Programovacím jazykem), že když se tyto síly změní, stanou se irelevantní.

Dobře, je pravděpodobné, že všechny vzorce jsou poněkud situační, ale s některými silami jsou ze skutečného světa a u jiných jsou síly z nástrojů. Nástroje se mění mnohem rychleji než skutečný svět.

4
Donal Fellows

Čtení o návrhových vzorcích je jako učení matematiky místo jejich znovuobjevování. Nikdo vám nebrání v tom, abyste v určitém oboru udělali velký pokrok, jakmile budete mít solidní pochopení toho, co se stalo dříve. Myslíš si, že Rieman nikdy Euclida nečetl?

3
Gus

Výhodou návrhových vzorů je snížení času, který vaši kolegové nebo zákazníci tráví přemýšlením „Jak to funguje?“. I když nemá smysl prosazovat standard kvůli standardizaci, existuje-li jeden společný a dobře srozumitelný způsob, jak něco udělat, pokaždé, když kodér hledá tento vzorec, který očekává, že ho najde a dělá, udělali jste své a své úkoly jednodušší.

1
Tom W

Věřím, že čtyřčlenný gang klasifikuje designové vzory jako

společné řešení běžně se vyskytujícího problému *

Takže ano, vzorce jsou relevantní, když nastane stejný typ problému. A to nás přivádí k problému s výrazem „Design Pattern“. Vzor je něco, co lze rozeznat opakovaně. Takže ve skutečnosti neexistuje vzor vzorů, existuje vzor problémů.

Některé programovací jazyky mohou mít nativní řešení některých z těchto problémů. Kniha „Design Patterns“ sama o sobě uvádí, že pokud používáte CLOS, má vzor návštěvnosti malou hodnotu, protože CLOS je vícero odeslání nativně podporován, což je problém, který se návštěvnický vzor snaží vyřešit.

Rámec .NET má také zabudovaný mechanismus událostí pro publikování událostí více posluchačům, čímž se v tomto kontextu stává vzor pozorovatele méně relevantní.

Změna z desktopových aplikací na webové aplikace ** také mění typ programovacích problémů, které musíme vyřešit. Mnoho vzorů v knize „Návrhové vzory“ jsou relevantní pro desktopové aplikace, ale ne tolik pro webové aplikace. U aplikací s jednou stránkou mohou být tyto vzory samozřejmě opět relevantní na straně klienta.

Designové vzory a knihy jako „Design Patterns“ nebo „Patterns of Enterprise Application Architecture“ jsou však nesmírně cenné, když jste začínající programátor a potýkáte se s novým typem problému poprvé; protože jsem byl poprvé požádán o implementaci funkce Zpět. Kdyby to nebylo v knize „Návrhové vzory“, moje implementace by pravděpodobně byla něco jako uložení snímku dat po každé změně stavu *** - velmi náchylný k chybám a hrozně neefektivní přístup.

Takže ano, některé vzorce se časem stávají méně relevantní a jak se stanete zkušeným programátorem, o nich méně přemýšlíte. Ale pro nováčka jsou cenné, pokud si pamatujete, že jsou prostředkem k vyřešení problému - a ne snahou použít co nejvíce.

* nabídka nemusí být stoprocentně přesná, protože je převzata z paměti

** Podle mých zkušeností je pro podniky velmi běžné volit mechanismy poskytování webových aplikací pro interní obchodní aplikace.

*** poté, co se naučím funkční programování a funkční datové struktury, pak by to mohl být způsob, jakým bych to dnes vyřešil.

1
Pete