{"id":265058,"date":"2023-06-08T11:14:00","date_gmt":"2023-06-08T08:14:00","guid":{"rendered":"https:\/\/inform.click\/modeller-av-design-for-nyborjare\/"},"modified":"2023-06-08T11:31:00","modified_gmt":"2023-06-08T08:31:00","slug":"modeller-av-design-for-nyborjare","status":"publish","type":"post","link":"https:\/\/inform.click\/sv\/modeller-av-design-for-nyborjare\/","title":{"rendered":"Modeller av design f\u00f6r nyb\u00f6rjare"},"content":{"rendered":"<p>\n  Om du redan har skrivit program f\u00f6r produkter eller mjukvaruapplikationer, stora\/sm\u00e5, har du med st\u00f6rsta sannolikhet anv\u00e4nt m\u00e5nga designm\u00f6nster&#8230; \u00e4ven om det \u00e4r m\u00f6jligt att de kanske inte \u00e4r ett av de mest anv\u00e4nda\/standardiserade designm\u00f6nstren.\n<\/p>\n<p>\n  Men ja, det finns en uppenbar skillnad mellan att implementera ett designm\u00f6nster och att &#8221;anv\u00e4nda&#8221; ett designm\u00f6nster&#8230; i vilket fall som helst, personen som arbetar med designm\u00f6nster f\u00f6rst\u00e5r det, eller kommer att f\u00f6rst\u00e5 det l\u00e4tt.\n<\/p>\n<p>\n  Po\u00e4ngen \u00e4r att designm\u00f6nster inte \u00e4r nytt f\u00f6r programmerare.\n<\/p>\n<p>\n  I den h\u00e4r artikeln nedan f\u00f6rs\u00f6ker jag f\u00f6rklara designm\u00f6nster, i dess grunder, och vi kommer att studera detaljer om olika m\u00f6nster, exempel etc. i en annan artikel.\n<\/p>\n<p>\n  Vad \u00e4r ett designm\u00f6nster?\n<\/p>\n<p>\n  <strong>Att b\u00f6rja\u2026<\/strong>\n<\/p>\n<p>\n  Jag tror att det b\u00e4sta s\u00e4ttet att b\u00f6rja med att f\u00f6rst\u00e5 designm\u00f6nster \u00e4r att f\u00f6rst\u00e5 icke-tekniska m\u00f6nster som vi medvetet\/omedvetet f\u00f6ljer i v\u00e5r vardag.\n<\/p>\n<p>\n  L\u00e5t oss till exempel ta m\u00e5nga CV som skickats in f\u00f6r ett ledigt jobb. Allas CV ser inte likadant ut&#8230; \u00e4ven om de alla tenderar att g\u00f6ra samma sak, det vill s\u00e4ga att ber\u00e4tta f\u00f6r en l\u00e4sare vad de \u00e4r skickliga p\u00e5, eller hur han\/hon kan vara l\u00e4mplig f\u00f6r jobbet.\n<\/p>\n<p>\n  Majoriteten av dem som skickar CV till jobb vet att de m\u00e5ste skicka in ett CV med en viss upps\u00e4ttning information i ett formaterat Word-dokument.\n<\/p>\n<p>\n  Detta&#8230; \u00e4r ett m\u00f6nster, att alla skickar in ett CV med en viss upps\u00e4ttning information uttryckt i den.\n<\/p>\n<p>\n  Om du k\u00e4nner f\u00f6r&#8230; kalla det mallar ist\u00e4llet f\u00f6r m\u00f6nster. Designmallar.\n<\/p>\n<p>\n  Det finns m\u00e5nga s\u00e5dana saker i verkliga livet som \u00e4r m\u00f6nster. Vissa gillar f\u00f6ljande exempel:\n<\/p>\n<p>\n  Alla kockar runt om i v\u00e4rlden lagar pizza eller pommes frites p\u00e5 samma s\u00e4tt. \u00c4ven om de kan toppa det \/ smaks\u00e4tta det annorlunda. Det \u00e4r ett m\u00f6nster.\n<\/p>\n<p>\n  Varje bils design f\u00f6ljer ett grundl\u00e4ggande designm\u00f6nster, fyra hjul, ratt, k\u00e4rndrivsystemet som gaspedalen-bryt-koppling, etc.\n<\/p>\n<p>\n  Alla saker som byggs\/produceras upprepade g\u00e5nger kommer oundvikligen att f\u00f6lja ett m\u00f6nster i sin design&#8230; vare sig det \u00e4r bilar, pizza, bankomater, vad som helst&#8230; till och med tandborste.\n<\/p>\n<p>\n  Design som n\u00e4stan har blivit ett standards\u00e4tt att koda n\u00e5gon logik\/mekanism\/teknik i mjukvara, kommer d\u00e4rf\u00f6r att kallas \u2013 och f\u00f6ljaktligen \u2013 studeras som Software Design Patterns.\n<\/p>\n<h3>\n  Varf\u00f6r \u00e4r ett designm\u00f6nster viktigt?<br \/>\n<\/h3>\n<p>\n  I grund och botten av tv\u00e5 sk\u00e4l:\n<\/p>\n<ol>\n<li>\n    <strong>Att h\u00e5lla sig till en standard<\/strong>\n  <\/li>\n<li>\n    <strong>F\u00f6r att snabba p\u00e5 utvecklingen<\/strong>\n  <\/li>\n<\/ol>\n<p>\n  Jag kommer att f\u00f6rklara i detalj.\n<\/p>\n<p>\n  F\u00f6r det f\u00f6rsta ser vi varf\u00f6r det \u00e4r intressant att h\u00e5lla sig till ett standardm\u00f6nster.\n<\/p>\n<p>\n  L\u00e5t oss ta listan med exempel p\u00e5 CV som vi diskuterade tidigare.\n<\/p>\n<p>\n  Det kan finnas en eller tv\u00e5 s\u00f6kande som skickar sina jobbans\u00f6kningar via e-post utan korrekt formatering, utan bilagor till sin e-post, etc., .. dessa en eller tv\u00e5 s\u00f6kande f\u00f6ljer inte m\u00f6nstret.. och kommer sannolikt INTE att hamna med jobbet&#8230;. Varf\u00f6r? Eftersom de avviker fr\u00e5n ett v\u00e4letablerat m\u00f6nster, som kanske inte gillas av de personer som listar CV f\u00f6r jobbet.\n<\/p>\n<h5>\n  \u00c4r det ingen som avviker fr\u00e5n m\u00f6nstret och blir &#8221;cool&#8221;? \u00c4r inte det innovation?<br \/>\n<\/h5>\n<p>\n  Ja, det finns tillf\u00e4llen d\u00e5 ett mycket annorlunda presenterat CV f\u00e5r jobbet f\u00f6r att vara annorlunda \u00e4n de andra. Vanligtvis har jag h\u00f6rt talas om webbdesigners som fick bra jobb f\u00f6r att de kompilerade och presenterade en cd-film av sitt arbete, eller gjorde en animationsfigur som f\u00f6rklarade sitt arbete, hade lagt upp det p\u00e5 sin blogg och liknande.\n<\/p>\n<p>\n  Men.. detta \u00e4r experimenterande (Innovation kommer fr\u00e5n framg\u00e5ngsrika experiment).\n<\/p>\n<p>\n  Oftast inom mjukvaruutveckling har du inte r\u00e5d att experimentera, p\u00e5 grund av tidslinjepress, f\u00f6rv\u00e4ntningar etc., men ja ibland, vissa intressanta projekt till\u00e5ter viss experimentering.\n<\/p>\n<p>\n  I mjukvara kan vi inte g\u00f6ra grundl\u00e4ggande saker som en bankins\u00e4ttning&#8230; p\u00e5 101 s\u00e4tt&#8230; det kommer bara att finnas n\u00e5gra f\u00e5 s\u00e4tt att behandla en bankins\u00e4ttning&#8230; s\u00e5 det \u00e4r vettigt att f\u00f6lja ett etablerat och testat m\u00f6nster.\n<\/p>\n<p>\n  Dessutom har de flesta designm\u00f6nster variationer&#8230; n\u00e5gra av varianterna \u00e4r s\u00e5 popul\u00e4ra att varianterna ocks\u00e5 kommer att vara en ny standardtyp av m\u00f6nstret.\n<\/p>\n<p>\n  Programvaruprojekt i dessa dagar f\u00f6rv\u00e4ntas (\u00e5tminstone implicit) f\u00f6lja en redan etablerad design av en liknande produkt\/mjukvara p\u00e5 marknaden.\n<\/p>\n<p>\n  Det \u00e4r h\u00e4r att h\u00e5lla fast vid en standardstil av kodning eller designm\u00f6nster hj\u00e4lper mjukvaruutveckling &#8230; att f\u00e4sta utvecklingen, ta bort kostnaderna f\u00f6r att oroa sig f\u00f6r en ny opr\u00f6vad implementering, etc.,\n<\/p>\n<h5>\n  F\u00e4stande utvecklingstid<br \/>\n<\/h5>\n<p>\n  Att f\u00f6lja ett standarddesignm\u00f6nster har ocks\u00e5 f\u00f6rdelen av att enkelt kommunicera genom tr\u00e4det\/hierarkin av mjukvaruarkitekter, modulleads, team leads, Developers etc., om &#8221;Hur&#8221; n\u00e5got beh\u00f6ver utvecklas, och inte bara &#8221;vad&#8221; m\u00e5ste vara tagit fram.\n<\/p>\n<p>\n  Ibland hj\u00e4lper det till och med testteam, eftersom testare av erfarenhet skulle veta att kod som f\u00f6ljer ett visst designm\u00f6nster f\u00f6rmodligen skulle kunna testas p\u00e5 ett specifikt s\u00e4tt med en upps\u00e4ttning testverktyg under en viss tidsperiod, och s\u00e5dana k\u00e4nda konstruktioner kanske inte har n\u00e5gra brister eller har n\u00e5gra &#8221;k\u00e4nda&#8221; brister.\n<\/p>\n<h5>\n  Tar inte designm\u00f6nster en personlig touch?<br \/>\n<\/h5>\n<p>\n  Nej. F\u00f6r det f\u00f6rsta f\u00f6r att vi inte s\u00e4ger att du f\u00f6ljer ett designm\u00f6nster och inget annat h\u00e4nder. De flesta projektimplementeringar delar bara grundl\u00e4ggande krav med andra projekt och kommer med st\u00f6rsta sannolikhet att ha avvikelser. Att bygga dessa avvikelser kommer att kr\u00e4va att de standardm\u00f6nster som anv\u00e4nds i en implementering b\u00f6js och str\u00e4cks ut.\n<\/p>\n<p>\n  Det \u00e4r som att g\u00f6ra pizzan p\u00e5 vanligt s\u00e4tt, sedan smaks\u00e4tta den\/presentera den till olika krav, antingen som en helpajspizza, eller en skuren paj eller vad som helst.\n<\/p>\n<p>\n  F\u00f6r att f\u00f6rst\u00e5 vikten av designm\u00f6nster \u00e4r en sak <strong>mycketviktigt<\/strong> :\n<\/p>\n<p>\n  Designm\u00f6nster \u00e4r inte n\u00e5gon teknik eller ramverk som ett visst f\u00f6retag eller programmeringsspr\u00e5k tvingar p\u00e5 oss. Det betyder att det \u00e4r som ett \u00f6ppet koncept&#8230; du \u00e4r fri att ta det, anv\u00e4nda det, modifiera det efter dina behov, och viktigast av allt&#8230; k\u00e4nna det ditt eget.\n<\/p>\n<p>\n  Alla vanliga eller popul\u00e4ra designm\u00f6nster \u00e4r faktiskt utdragbara ganska kraftigt.. de blev popul\u00e4ra, f\u00f6r det f\u00f6rsta, bara f\u00f6r att m\u00e5nga m\u00e4nniskor anv\u00e4nder det.. och m\u00e5nga m\u00e4nniskor anv\u00e4nder det bara f\u00f6r att de \u00e4r flexibla f\u00f6r deras krav.\n<\/p>\n<p>\n  Eller hur tror du att ett standarddesignm\u00f6nster skulle passa ett projekt i New Jersey f\u00f6r ett f\u00f6retag och \u00e4ven i Bangalore f\u00f6r ett annat f\u00f6retag och en annan typ av projekt.\n<\/p>\n<p>\n  Det leder oss till &#8221; <strong>De flesta designm\u00f6nster \u00e4r generiska<\/strong> &#8221;&#8230; vilket inneb\u00e4r att de inte alltid anv\u00e4nds f\u00f6r att bygga samma typ av programvara. Du kanske inte h\u00f6r saker som &#8221;designm\u00f6nster f\u00f6r bankprogram&#8221; eller &#8221;designm\u00f6nster f\u00f6r sociala n\u00e4tverksprogram&#8221; som anv\u00e4nds i vanliga diskussioner&#8230; utan bara &#8221;designm\u00f6nster&#8221;.\n<\/p>\n<h3>\n  Vem borde bry sig om designm\u00f6nster?<br \/>\n<\/h3>\n<ol>\n<li>Precis som hur en bra byggnadsarkitekt utvecklar sina f\u00e4rdigheter att designa byggnader, genom att studera arkitekturen och designen av m\u00e5nga byggnader och former under hela sitt liv, b\u00f6r en mjukvaruarkitekt studera och visualisera hur olika mjukvaru-\/tekniksystem \u00f6ver hela v\u00e4rlden \u00e4r designade eller arkitektonerade.\n  <\/li>\n<li>Och precis som hur byggnadsarbetarna i en byggnad b\u00f6r vara medvetna om olika s\u00e4tt att implementera en byggnadsdesign, antingen utifr\u00e5n sin egen erfarenhet eller genom att f\u00f6rst\u00e5 det fr\u00e5n byggnadens arkitekt.\n  <\/li>\n<\/ol>\n<p>\n  Mjukvaruutvecklare\/programmerare b\u00f6r f\u00f6rst\u00e5 grundl\u00e4ggande mjukvarudesignm\u00f6nster och deras implementeringskod&#8230; antingen sj\u00e4lva eller fr\u00e5n mjukvaruarkitekten som instruerar teamet att utveckla det enligt ett visst m\u00f6nster.\n<\/p>\n<h3>\n  Grundl\u00e4ggande kodm\u00f6nster<br \/>\n<\/h3>\n<p>\n  I b\u00f6rjan av den h\u00e4r artikeln sa jag att vilken programmerare som helst skulle ha anv\u00e4nt designm\u00f6nster. H\u00e4r \u00e4r n\u00e5gra mycket grundl\u00e4ggande exempel p\u00e5 kod som f\u00f6ljer ett m\u00f6nster.\n<\/p>\n<ol>\n<li>\n<p>\n      F\u00f6ljande \u00e4r ett grundl\u00e4ggande designm\u00f6nster f\u00f6r <strong>Intercepting Filter .<\/strong>\n    <\/p>\n<\/li>\n<li>\n<p>\n      D\u00f6lj kopiera kod\n    <\/p>\n<\/li>\n<li>\n<pre><code>switch (condition){\n     case Value1:\n     case Value2:\n     default:\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>\n      H\u00e4ndelseutl\u00f6sare, H\u00e4ndelsehanterare&#8230; kommer under det grundl\u00e4ggande designm\u00f6nster f\u00f6r <strong>\u00e4mne-observat\u00f6rer .<\/strong> Vi kommer att diskutera varje m\u00f6nsterstandard, popul\u00e4ra varianter, med exempel&#8230; snart.\n    <\/p>\n<\/li>\n<li>\n<p>\n      Om du har anv\u00e4nt n\u00e5gon form av samlingar, som Arraylist i C#, och itererar genom arrayen, s\u00e5 har du anv\u00e4nt ett grundl\u00e4ggande <strong>Iterator-<\/strong> designm\u00f6nster.\n    <\/p>\n<\/li>\n<li>\n<p>\n      Koden nedan \u00e4r ett exempel p\u00e5 ett grundl\u00e4ggande m\u00f6nster f\u00f6r undantagshantering\/ <strong>ansvarskedja<\/strong>.\n    <\/p>\n<\/li>\n<li>\n<p>\n      D\u00f6lj kopiera kod\n    <\/p>\n<\/li>\n<li>\n<pre><code>try{\n}catch(Exception ex){\n}\nfinally{\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>\n  Olika omr\u00e5den av designm\u00f6nster<br \/>\n<\/h3>\n<p>\n  Det finns olika terminologier i programvara f\u00f6rutom Design Patterns.. n\u00e5gra av dem \u00e4r ofta relaterade till designm\u00f6nster som vi hittills har diskuterat.. och n\u00e5gra av dem \u00e4r helt orelaterade.\n<\/p>\n<p>\n  Det vi hittills har diskuterat ovan kallas ibland &#8221; <strong>Implementation Design Patterns<\/strong> &#8221;.\n<\/p>\n<p>\n  Det finns andra, som <strong>arkitekturm\u00f6nster, ramm\u00f6nster, spr\u00e5km\u00f6nster<\/strong> (oftast kallade spr\u00e5kkonstruktioner).\n<\/p>\n<p>\n  De \u00e4r m\u00f6nster som l\u00e4ggs p\u00e5 olika niv\u00e5er&#8230; som <strong>Spr\u00e5km\u00f6nster<\/strong> \u00e4r m\u00f6nster implementerade som en del av programmeringsspr\u00e5k som C#\/Java, som spr\u00e5kets egenskaper\/konstruktioner.. n\u00e5gra av dem har vi redan sett.\n<\/p>\n<p>\n  Alla ovanst\u00e5ende exempel p\u00e5 subjektobservat\u00f6r, avlyssningsfilter, etc., absorberas som spr\u00e5kkonstruktioner i alla popul\u00e4ra h\u00f6gniv\u00e5programmeringsspr\u00e5k som kom efter C.\n<\/p>\n<p>\n  <strong>Arkitekturm\u00f6nster<\/strong> \u00e4r dessa standardmodeller av programvaruarkitektur, som vanligtvis h\u00e4nvisar till olika metoder f\u00f6r att placera eller l\u00e4nka moduler eller lager eller niv\u00e5er, som utg\u00f6r hela applikationen.\n<\/p>\n<p>\n  Detta \u00e4r helt utan samband med designm\u00f6nster i betydelsen kodning\/programmering som&#8230; men de delar samma svar p\u00e5 Varf\u00f6r \/ Vad \u00e4r som diskuteras i den h\u00e4r artikeln.\n<\/p>\n<p>\n  <strong>Ramm\u00f6nster<\/strong> \u00e4r inte heller relaterade till v\u00e5r diskussion om designm\u00f6nster. N\u00e4r ramverk som .NET implementerar speciella metoder f\u00f6r att logga fel eller sp\u00e5ra kodexekveringsv\u00e4gar enkelt genom ramverkets inbyggda metoder eller objekt, kallas s\u00e5dana mekanismer f\u00f6r ramm\u00f6nster.\n<\/p>\n<p>\n  N\u00e5gra exempel i .NET Framework inkluderar stackTrace-funktionen, klassattributsfunktionen med [] fyrkantiga klammerparenteser ovanp\u00e5 klass-\/metoddefinitioner, etc. N\u00e4r vi anv\u00e4nder s\u00e5dana funktioner kodar vi med Frameworks inbyggda m\u00f6nster.\n<\/p>\n<p>\n  Jag hoppas att den h\u00e4r artikeln hj\u00e4lper till att ge en \u00f6versikt \u00f6ver designm\u00f6nster och relaterade terminologier.\n<\/p>\n<p>\n  Hittills har vi bara diskuterat vad standarderna \u00e4r och hur viktiga de \u00e4r&#8230; men vi har inte diskuterat vilka standardm\u00f6nstren i sig \u00e4r.\n<\/p>\n<h4>\n  Licens<br \/>\n<\/h4>\n<p>\n  Den h\u00e4r artikeln, tillsammans med all tillh\u00f6rande k\u00e4llkod och filer, \u00e4r licensierad under The Code Project Open License (CPOL).\n<\/p>\n<\/p>\n<div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\n  Inspelningsk\u00e4lla: <a target=\"_blank\" rel=\"noopener nofollow\" data-pssr=\"\" href=\"http:\/\/www.instantshift.com\/2016\/01\/12\/models-of-design-for-beginners\/\">instantshift.com<\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Om du redan har skrivit program f\u00f6r produkter eller mjukvaruapplikationer, stora\/sm\u00e5, har du med st\u00f6rsta sannolikhet anv\u00e4nt m\u00e5nga designm\u00f6nster&#8230; \u00e4ven om det \u00e4r m\u00f6jligt att de kanske inte \u00e4r ett av de mest anv\u00e4nda\/standardiserade designm\u00f6nstren. Men ja, det finns en uppenbar skillnad mellan att implementera ett designm\u00f6nster och att &#8221;anv\u00e4nda&#8221; ett designm\u00f6nster&#8230; i vilket fall som helst, personen som arbetar med designm\u00f6nster f\u00f6rst\u00e5r det, eller kommer att f\u00f6rst\u00e5 det l\u00e4tt. Po\u00e4ngen \u00e4r att designm\u00f6nster inte \u00e4r nytt f\u00f6r programmerare. I den h\u00e4r artikeln nedan f\u00f6rs\u00f6ker jag f\u00f6rklara designm\u00f6nster, i dess grunder, och &#8230;<\/p>\n","protected":false},"author":1,"featured_media":142080,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[230,61,204,152],"tags":[],"class_list":["post-265058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-larobocker","category-web-och-wordpress","category-webbdesign","category-webbtips-och-tricks"],"_links":{"self":[{"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/posts\/265058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/comments?post=265058"}],"version-history":[{"count":0,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/posts\/265058\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/media\/142080"}],"wp:attachment":[{"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/media?parent=265058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/categories?post=265058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inform.click\/sv\/wp-json\/wp\/v2\/tags?post=265058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}