SAGASaga-beli-132x66SAGASAGA

Ultimativni vodič "Kako ne upasti u zamku znanu kao anti-patern"

Anti-patern predstavlja često korišćeno rešenje za neki problem, ali koje nije dobro i koje najčešće ima negativne posledice. I vrlo je verovatno da smo svi više puta videli i napravili neki anti-patern, a da toga nismo bili svesni.

Većina softver developera se u toku svoje karijere susrela sa nekim dizajn patternima, ili su bar čuli za taj termin. Paterni predstavljaju opšta, dobro poznata i dokumentovana, rešenja koja se koriste za rešavanje najčešćih problema u razvoju softvera.

Ali mnogi ne znaju da postoji i tamna strana, tj. anti-paterni. Anti-patern predstavlja često korišćeno rešenje za neki problem, ali koje nije dobro i koje najčešće ima negativne posledice. I vrlo je verovatno da smo svi više puta videli i napravili neki anti-patern, a da toga nismo bili svesni. Anti-paterni se mogu javiti u svim fazama razvoja softvera – odabiru metodologije, organizaciji, dizajniranju arhitekture, programiranju i ima ih verovatno i više nego dizajn paterna.

Neki od najčešćih anti-paterna su:

Bleeding Edge – Korišćenje najnovijih tehnologija i alata, koji su, iako obećavajući, najčešće nedovoljno dokumentovani ili još uvek u beta fazi i samim tim predstavljaju rizik da budu nepouzdani i da imaju negativan uticaj na kompletno rešenje. Ovakav pristup nije uvek anti-patern, već samo u slučajevima kada tehnologija ili alat ne postanu mainstream ili se napuste posle određenog vremena. Usled toga, neophodno je biti obazriv prilikom odabira neke najnovije tehnologije u razvoju, ali svakako ne treba zbog rizika izbegavati ovakav pristup, već samo dobro analizirati pre upotrebe.

Vendor Lock-In – Sistem koji je u prevelikoj meri zavisan od neke eksterne komponente. Ovakvim pristupom bilo kakva promena od strane vendora može da zahteva velike izmene i dorade kompletnog softvera. Moguće je i da eksterna komponenta/servis prestane sa pružanjem usluga i da to onemogući korišćenje vašeg rešenja. Najbolji način za izbegavanje ovog anti-paterna je korišćenje među-sloja između vašeg softvera i eksterne komponente i da se napravi integracija sa više različitih vendora i da se napravi fail-over scenario u slučaju kada neka eksterna komponenta prestane sa radom.

Reinventing the Square Wheel – Kreiranje alata i funkcionalnosti koji već postoje kao standardizovana rešenja, čiji krajnji rezultat bude lošiji nego što je standardno rešenje pružalo. Ovo se dešava u situacijama kada developer ne zna da postoji standardno rešenje, ili ne poznaje dovoljno problem koji želi da reši, tako da ne može da zna kako ga standardno rešenje prevazilazi. Ovo se može izbeći boljom analizom problema pre pokušavanja primene nekog rešenja. Ovaj anti-patern je često vrlo teško uočiti, a samim tim i otkloniti

Programming by Permutation – Ovo se često naziva i „programiranje pokušaja“. Ovaj anti-patern je verovatno najčešće korišćen od strane junior developera. On podrazumeva rešavanje problema pravljenjem malih korekcija (permutacija) na određenom kôdu, a zatim testiranje kako bi se ustanovilo da li se sada softver ponaša kao što je očekivano. Ovakvo programiranje je posledica nedovoljnog poznavanja problema i česta posledica su rupe i bugovi u drugom delu softvera, koji nastaju usled neobrađenih slučajeva.

Premature Optimization – Optimizovanje performansi sistema na osnovu slobodne procene, gde bi mogla da budu neka uska grla, a ne na osnovu testova i realnih primera nakon puštanja softvera u testni i produkcioni rad. Ovakvim pristupom se često ne dobijaju bolje performanse, a negativne posledice mogu da budu brojne, kao što su kompleksniji kôd i arhitektura, teže održavanje, a ne retko i lošije performanse nego što su bile pre optimizacije.

Golden Hammer – Pretpostavka da će rešenje koje je uspešno implementirano u nekom softveru, u kompletno drugom rešenju, biti takođe uspešno implementirano. Nisu svi softveri identični, pa samim tim i alati i rešenja koja se primenjuju ne mogu da budu identična, već ih je neophodno prilagođavati ili menjati u zavisnosti od problema koji se želi prevazići.

Lava Flow – Predstavlja čuvanje nepoželjnog, nepotrebnog i najčešće loše napisanog koda, a jedini razlog je to što bi, njegovo uklanjanje, možda imalo neplanirane troškove i posledice. Ovakav kôd se najčešće napiše u procesu razvoja, a zatim ne bude prepisan pre puštanja u produkciju. Otuda je i dobio ovaj naziv, jer se ovakav kôd nakon puštanja u produkciju ponaša kao okamenjena lava – čvrsto, nepromenljivo i beskorisno.

Spaghetti Code – Pežorativni naziv za nestruktuiran, loše napisan kôd, koji je vrlo težak za održavanje. Postoje mnogi uzroci koji izazivaju ovaj anti-patern, a najčešći su kratki rokovi za razvoj, nedovoljno iskustvo i nepostojanje pravila za kodiranje. Kako bi se izbegao ovaj problem, potrebno je pratiti najbolje prakse za pisanje kôda i u što je većoj meri smanjiti špagetirani kôd.

Interface Bloat – Ovaj anti-patern opisuje situaciju kada jedan interface ima preveliki broj metoda i klase koje ga implementiraju, ne mogu i ne znaju kako da izvrše sve potrebne operacije i onda neke od metoda ostanu neimplementirane. Ovaj anti-patern je u direktnoj suprotnosti od “I” stavke u SOLID pristupu programiranje, koji se smatra najboljom praksom u dizajniranju softvera.

God Object – Objekat za koji se može reći da zna ili je odgovoran za previše stvari. Najčešće ih odlikuje veliki broj atributa i još veći broj metoda i operacija. Uvezani su sa svim ostalim komponentama sistema i usled toga čak i male izmene na tom objektu mogu imati posledice po, naizgled, nepovezane komponente. Ovo se može izbeći podelom objekta u manje celine, odgovorne samo za određene, logički povezane operacije. U nekim situacija, God objekti mogu da budu i korisni, ukoliko se radi o, npr. mikrokontrolerima, gde je centralizacija kontrole važnija od održivosti i elegantnosti.

Golden Plating – Dodavanje funkcionalnosti ili generalno rad na nekom projektu nakon određene tačke, kada te dorade nisu vredne uloženog rada. Ovo se dešava kada se, nakon ispunjenja svih korisničkih zahteva, krene u dodavanje novih funkcionalnosti za koje mislimo da će se svideti korisniku.

Poltergeist – Poltergajst je tipičan naziv za stateless objekte, čija je jedina uloga da pozovu metodu u nekoj drugoj klasi. Najčešće se pojavljuju kada programer predvidi da će neka metoda imati dodatnu logiku u budućnosti, ali se to nikada ne desi.

Pattern Overuse – Najčešća greška koja se javlja kod programera koji se prvi put susretnu sa nekim paternom. Vođeni željom da pokažu kako su savladali određeni patern, pokušaće da ga “uglave” gde god je moguće. Ovo se dešava sa svim poznatijim paternima kao što su Singleton, Observer, Factory ili Strategy. Nije uvek pametno i poželjno ubacivati paterne. Nekada je dovoljno rukovoditi se KISS principom (Keep It Simple Stupid). Korišćenje paterna u prevelikoj meri može uticati na preteranu kompleksnost sistema i lošije performanse.

Veoma je bitno da se zna za postojanje anti-paterna i na koji način mogu da utiču na performanse i održavanje nekog sistema. Lista anti-paterna je velika i verovatno su mnoge arhitekte i developeri u svom radu napravili više grešaka koje spadaju u tu listu. Ne postoji savršen softver i sigurno će se nekad neka greška pojaviti kao rezultat loše procene, kratkih rokova itd. Samo dobrim poznavanjem najboljih praksi i konstantnim usavršavanjem se nivo ovakvih grešaka može smanjiti i smanjiti njihov uticaj na rad rešenja.

Nikola Mihailović
ARHITEKTA SOFTVERSKIH REŠENJA
„Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.“

Martin Golding

Povezani blogovi

Potrošač 4.0 – Evolucija potrošača kao osnov za evoluciju poslovanja

Potrošač 4.0 – Evolucija potrošača kao osnov za evoluciju poslovanja

Raste cena kreativnosti

Raste cena kreativnosti

Kako iskoristiti podatke iz postojećeg CRM-a?

Kako iskoristiti podatke iz postojećeg CRM-a?

“Medijaš” u IT-u

“Medijaš” u IT-u

Bolje sprečiti, nego lečiti

Bolje sprečiti, nego lečiti

Demingifikacija Sage

Demingifikacija Sage

style="fill:;" fill=""
style="fill:;" fill=""
© 2019 SAGA. All Rights Reserved LoboHouse Agency
    • српски
    • енглески
      Tokom posete našoj web prezentaciji, koristimo kolačiće koji omogućavaju identifikaciju korisnika. Kolačići su male datoteke koje se privremeno čuvaju na hard disku. Naši kolačići ne sadrže lične podatke, tako da je vaša privatnost zaštićena, takođe možete zahtevati brisanje evidentiranih podataka. Ukoliko isključite upotrebu kolačića, postoji mogućnost da nećete moći da otvorite sve sadržaje na našoj web prezentaciji. Da li zelite da našu web prezentaciju pogledate bez kolačića – cookies? Klikom na “Slažem se”, koristićete sve kolačiće.
      Cookie podešavanjaSLAŽEM SEODBIJAM
      Manage consent

      Kolačići

      Kolačiće upotrebljavamo kako bi ova web stranica radila pravilno. Kolačići pomažu da obezbedimo personalizovano iskustvo i relevantne reklame za vas, a web analitiku za nas. Kako biste saznali više, pogledajte listu kolačića i pogledajte našu Polisu kolačića.
      Neophodni
      Always Enabled

      Ovi su kolačići neophodni za funkcionisanje veb-sajta i ne mogu se isključiti u našim sistemima. Oni su obično postavljeni kao odgovor na tvoje aktivnosti na sajtu, koje predstavljaju zahtev za usluge kao što su podešavanje privatnosti, prijavljivanje ili popunjavanje obrazaca. Svoj pretraživač možeš da podesiš tako da blokira ove kolačiće ili te upozori na njih, ali u tom slučaju neki delovi sajta neće raditi. Ovi kolačići ne čuvaju nikakve podatke koji bi omogućili ličnu identifikaciju.

      Opcioni

      Analitika Ovi nam kolačići omogućavaju da beležimo broj poseta i analiziramo izvore prometa kako bismo izmerili i unapredili funkcionisanje našeg sajta. Oni nam pomažu da saznamo koje su stranice najpopularnije, a koje najmanje popularne i vidimo kako se posetioci kreću po sajtu. Svi podaci koje prikupljaju ovi kolačići ostaju anonimni. Ako ne želiš da daš dozvolu za ove kolačiće, nećemo znati kada posećuješ naš sajt i nećemo moći da pratimo njegovo funkcionisanje. Reklama i društvene mreže Ove kolačiće kroz naš veb-sajt mogu da postave i partnerski sajtovi za oglašavanje. Ove kompanije mogu ih koristiti radi kreiranja profila tvojih interesovanja i prikazivanja relevantnih reklama na drugim sajtovima. Oni ne pohranjuju direktno lične podatke, ali rade tako što jedinstveno identifikuju tvoj pretraživač i uređaj. Ako ne dozvoliš ove kolačiće, nećeš iskusiti naše ciljane reklame na drugim veb-lokacijama.

       

       

      • Naslovna
      • Rešenja i servisi
      • Karijera
        ▼
        • Praksa
      • Digitalna transformacija
      • O nama
        ▼
        • CSR
      • Blogovi & vesti
      • Događaji
      • Kontakt
      • sr
      • en