Веб Девелопмент Тхе 10 Цодинг Антипаттернс које морате избегавати
Дизајнирање архитектуре веб-сајта или апликације, или постављање ефикасног радног тока кодирања често чине да се бавимо проблемима који се понављају. Не морамо нужно да решавамо ове проблеме дизајна софтвера од нуле, као решења на архитектонском нивоу могу се поново користити на исти начин као исечци кода на микро-нивоу.
Дизајн је генерално реусабле солутионс за одређене сценарије, који могу добро је ријешити уобичајене проблеме, и може нам помоћи да оптимизујемо наш код.
Иако су дизајнерски обрасци велика средства за побољшање нашег развојног процеса користећи добро тестиране формуле, понекад можемо и да погријешимо с њима. То се назива антипаттернс.
Шта су Антипаттернс?
Термин “антипаттерн” је скован у књизи под називом АнтиПаттернс из 1998. године употребљена решења која на почетку изгледају корисна, али касније се испоставило више штете него користи.
То се може догодити из различитих разлога, на примјер ако не користимо обрасце у правом контексту, окружењу или времену (рјешења која су била учинковита у прошлости не морају увијек радити у садашњости), или у другим случајевима цијелу парадигму било је лоше од самог почетка.
Често се називају и антипаттернс обрасци неуспјеха. Добра вест је да је то могуће их је препознати и избјећи.
У овом посту ћемо имати поглед на 10 уобичајених антипаттерн-ова кодирања у веб развоју који нас могу обманути мислећи да имамо добро оптимизиран код. (Имајте на уму да антипаттернс наведене у овом посту нису нужно исте као што можете наћи у књизи поменутој горе.)
1. Преурањена оптимизација
Добар тајминг је кључни фактор у оптимизацији кода. Можемо лако репродуковати антипаттерн “преурањена оптимизација”, ако обратимо пажњу на мале ефикасности и оптимизујемо их прерано у процесу развоја, пре него што тачно знамо шта желимо да радимо.
Према чувеном цитату Доналда Кнута “преурањена оптимизација је корен сваког зла“, што може бити претјеривање, али још увијек показује колико озбиљна питања могу узроковати преурањена оптимизација.
Ако оптимизујемо перформансе пре постављања ефикасне архитектуре, можемо нижа читљивост кода, направити дебаггинг и одржавање теже, и додати сувишне делове у наш код.
Да би се спречила преурањена оптимизација, добро би било да се придржавате принципа програмирања ИАГНИ (не треба вам) који саветује “увек спроводите ствари када их заиста требате, никада када само предвидите да их требате.”
2. Реинвентинг тхе Вхеел
Тхе “поново откријте точак” антипаттерн се понекад назива и “пројектовање у вакууму”. То се догађа када то желимо све радите сами и написати све од нуле, без тражења већ постојећих метода, АПИ-ја или библиотека.
Реинвентирање точка није само ствар која троши време, већ и прилагођена решења, посебно за основне функционалности, ретко су добри као стандардни које су већ тестирали многи програмери и корисници.
3. Зависност Пакла
Супротно од “поново откријте точак” антипаттерн је још један заједнички антипаттерн који се зове “депенденци хелл”.
Ако, уместо да пишемо све од нуле, користимо превише библиотека трећих страна које се ослањају на одређене верзије других библиотека, лако можемо наићи на тешко управљиву ситуацију када желимо да ажурирамо, јер су ове зависне зависности у многим случајевима неспојиве једна са другом.
Пакао зависности може се решити коришћењем пакет менаџера који су у стању паметно ажурирајте међуовисне зависности. Ако нас проблем преплави превише, рефацторинг може бити добра идеја.
4. Код шпагета
“Спагхетти цоде” је вероватно најпознатији антипаттерн кодирања. То описује апликација коју је тешко исправити или модификовати због недостатка одговарајуће архитектуре.
Резултат лошег дизајна софтвера је гомила кода која је по структури слична здјели шпагета, тј. замршен и замршен. Читљивост шпагетског кода је веома ниска, и обично је готово немогућа мисија да се схвати како функционише.
Код шпагета обично потиче од комбинација различитих пракси лошег кодирања, као што је код који не садржи исправне блокове увјета, који има пуно гото израза, изузетака и нити, који садрже дијелове који припадају негдје другдје, има минималне везе између објеката, има функције или методе које се не могу поновно употријебити, или није документиран исправно или уопште.
5. Програмирање помоћу пермутације
“Програмирање помоћу пермутације” или “случајно програмирање” дешава се када покушамо да пронађемо решење за проблем узастопним експериментисањем са малим модификацијама, тестирањем и проценом једног по једног, и на крају применом онога који прво ради.
Програмирање помоћу пермутације може лако увести нове грешке у наш код, још горе, то су грешке које не препознајемо одмах. У многим случајевима, такође је немогуће предвидети да ли ће рјешење функционирати за све могуће сценарије, или не.
6. Програмирање копирања и лепљења
“Копирање и лепљење програмирања” појављује се када не следимо принцип "Не понављамо" (ДРИ), а уместо стварања генеричких решења, убацујемо већ постојеће исјечке кода на различита места, а касније их уређујемо да би се уклопили у дати контекст.
Ова пракса резултира кодом који се веома понавља, јер се уметнути делови кода обично разликују само у мањим одступањима.
Програми за копирање и лепљење не раде само програмери почетници, већ и искусни програмери, јер многи од њих су склони томе користе своје сопствене, претходно написане, добро тестиране одломке кода за специфичне задатке, до којих лако може доћи непредвиђена понављања.
7. Програмирање Култура терета
Име “програмирање у култури терета” долази из специфичног етнографског феномена који се зове “царго цулт”. Култни терети појавили су се у јужном Пацифику након Другог свјетског рата, када је присилни контакт са напредним цивилизацијама навео домородце да помисле да су произведени производи, као што су Цоца-Цола, телевизори и хладњаци које су донијели теретни бродови на отоке, створени од наднаравног методе; и ако они изводе магичне обреде сличне обичајима западњака, терет испуњен робом ће поново доћи.
Када обавезујемо антипаттерн за програмирање култа терета, у суштини радимо исто. Користимо оквире, библиотеке, решења, обрасце дизајна, итд. Који су добро функционисали за друге, без разумевања зашто то чинимо, или како те технологије тачно функционишу.
У многим случајевима програмери само Ритуално радите оно што је у то време без икакве сврхе. Ова пракса није само лоша, јер чини нашу апликацију сувише отеченом, али и лако може увести нове грешке у наш код.
8. Лава Флов
Говоримо о “лава флов” антипаттерн када треба бавити се кодом који има редундантне или слабије делове то чини се да су интегрални али не разумемо у потпуности шта он ради или како делује на целу апликацију. Због тога је ризично уклонити га.
Обично се то дешава легаци цоде, или када шифру је написао неко други (обично без одговарајуће документације), или када се пројекат преселио пребрзо од развоја до фазе производње.
Назив антипаттерн долази из његове сличности са лавом која долази из вулкана, тј. Прво се креће брзо и флуидно без предузимања превише мера опреза, али се касније учвршћује и постаје тешко уклонити..
У теорији, можемо се ријешити токова лаве опсежно тестирање и рефацторинг, али у пракси, имплементација је често тешка или чак немогућа. Како токови лаве обично имају високе трошкове перформанси, боље их је спријечити постављањем добро дизајниране архитектуре и звучног тијека рада од самог почетка..
9. Хард Цодинг
“Хард цодинг” је добро познати антипаттерн против којег нас већина књига о развоју веба упозорава управо у предговору. Тешко кодирање је несрећна пракса у којој складиштимо конфигурационе или улазне податке, као што је путања датотеке или име удаљеног хоста, у изворном коду уместо добијања из конфигурационог фајла, базе података, корисничког уноса или другог спољног извора.
Главни проблем са хард кодом је тај ради исправно само у одређеном окружењу, анд ат у сваком тренутку када се услови промене, морамо да изменимо изворни код, обично на више одвојених места.
10. Софт Цодинг
Ако се јако потрудимо да избегнемо замку тврдог кодирања, лако можемо да покренемо други антипаттерн који се зове “софт цодинг”, што је управо супротно.
Код софт кодирања, стављамо ствари у изворни код у вањске изворе, на пример, складиштимо пословну логику у бази података. Најчешћи разлог зашто то чинимо је страх да ће се пословна правила у будућности промијенити, па ћемо морати да препишемо код..
У екстремним случајевима, софт програм може постали тако апстрактни и замршени да је то готово немогуће схватити (посебно за нове чланове тима), и изузетно тешко је одржавати и исправљати.