Duke përmirësuar vazhdimisht dizajnin e kodit, ne e bëjmë më të lehtë dhe më të lehtë punën me të — Joshua Kerievsky, Refactoring to Patterns

Rifaktorimi është marrja e një kodi ekzistues, funksional, dhe përmirësimi i atij kodi.

Mirë, por çfarë do të thotë "më mirë"? Do të thotë i strukturuar më mirë, i ndërtuar më mirë, më i lexueshëm dhe më i kuptueshëm.

Kodi yt është më i lehtë për t'u punuar, është më e lehtë për të shtuar veçori të reja, më e lehtë për të dalluar dhe rregulluar gabimet, më e lehtë për t'u zgjeruar dhe për t'u mbajtur, dhe është një mënyrë për të ndaluar që kodi juaj të dalë gradualisht jashtë kontrollit.

Çfarë është rifaktorimi

Nëse keni parë ndonjëherë një metodë që po zgjatej pak dhe keni gjetur disa rreshta në të që i përkasin së bashku, i ndani ato në metodën e tyre.

Dhe më pas zëvendësoi kodin origjinal me një thirrje në atë metodë të re. Epo, ky është një rifaktorim, ky është rifaktorimi i metodës së ekstraktit.

Është një koleksione të vogla, të pavarura teknikashpër përmirësimin e kodit që tashmë ekziston. Ky kod është shkruar tashmë dhe tashmë po funksionon. Ne nuk e ndryshojmë atë që bën.

Këto teknika individuale, secila është një teknikë e vetme rifaktorimi, dhe ato janë shpesh shumë të vogla dhe secila merret me një çështje specifike të zakonshme.

Nuk ka njëgjë të tillë si një një grup rregullash ose një urdhër specifikqë çdokush mund të ndjekë. Por ka një sërë teknikash për t'ju ndihmuar të rifaktoni kodin tuaj.

Tani nëse keni shkruar kod për një kohë, pothuajse e keni bërë tashmë një pjesë të kësaj. Por duke përdorur teknika e rifaktorimit formal, sjell më shumë vetëdije për këtë vendim.

Nuk zëvendëson intuitën tuaj, por ju jep disa pyetje të tjera për të bërë:

  1. Nëse po përpiqeni të ndani disa kode, çfarë duhet të kërkoni vërtet?
  2. Çfarë bëni kur ka një përzierje të variablave lokale dhe jo lokale?
  3. A ka ndonjë arsye pse mund të mos ndani disa kode në metodën e vet?

- Kategoritë e teknikave

Një mënyrë e dobishme për të menduar për teknikat e rifaktorimit është të kuptosh se ato mund të grupohen në disa kategori bazuar në nivele të ndryshme të kodit mbi të cilat ata veprojnë.

Disa prej tyre merren me metodat individuale vetë, duke mos u shqetësuar për hierarkitë e klasave ose modelet e dizajnit.

Pastaj, ka rifaktorime ku ne kemi një pamje pak më të lartë. Ne jemi ende duke shqyrtuar metodën, por tani jemi pak më të vetëdijshëm për klasat tona. A është kjo metodë në klasën e duhur?.

Dhe, ne mund të ngjitemi në një nivel tjetër abstraksioni, duke mos u fokusuar aq shumë në metodat, por më shumë në komunikimin midis klasave të ndryshme. A duket se klasa A nuk bën gjë tjetër veçse përdor metodat dhe vetitë e klasës B?.

Dhe ne jemi edhe një nivel tjetër. Ka teknika të vërteta që shkëlqejnë në një aplikacione orientuar drejt objektit. A janë të dhënat se ne duhet të përdorim më shumë trashëgimi dhe polimorfizëm apo në të vërtetë më pak trashëgimi dhe polimorfizëm?.

Do të shihni disa rifaktorime që duken të jenë saktësisht anasjellta e njëri-tjetrit. Një teknikë rifaktorimi ka emrin "Shto Parametrin", por një tjetër është "Hiq Parametrin".

Dhe, në fund të fundit, është krejtësisht e kuptueshme që teknika që ju nevojitet është ndonjëherë e kundërta e një tjetre.

Çfarë nuk është rifaktorimi

Rifaktorimi ështënukdebugues.

Kodi juaj tashmë duhet të funksionojë. Nuk është një mënyrë për të gjetur defekte, duhet t'i kishit rregulluar ato sapo të ndodhën.

Pra, është e vërtetë, gjatëprocesit të rifaktorimit mund të gjeni defekte. Por në momentin që ju filloni të merreni me këtë. Ju keni ndalur rifaktorimin dhe keni filluar rregullimin e defekteve që është një mentalitet shumë i ndryshëm.

Rifaktorimi është nukperformancë.

Ky është një tjetër keqkuptim shumë i zakonshëm që ne pastrojmë kodin tonë dhe kjo do ta bëjë atë më të shpejtë.

Jo, performanca e kodit nuk është qëllimi i rifaktorimit dhe as pritshmëria. Por, performanca jonë është!. Ne do të jemi në gjendje ta lexojmë kodin dhe ta kuptojmë atë më shpejt. Jo vetëm pjesë individuale të kodit, por aplikacioni më i madh.

Rifaktorimi nukshton veçori

Nëse gjatë këtij procesi shtoni një veçori të re, nuk po rifaktoroni më. Sepse gjatë rifaktorimit ne nuk e ndryshojmë sjelljen të kodit.

Ne mund të bëjmë shumë nga brenda, duke krijuar klasa të reja, duke lëvizur funksionalitetin nga një vend në tjetrin, duke riemëruar, riorganizuar. Por rezultati përfundimtar i procesit të rifaktorimit nuk e ndryshon sjelljen e vëzhgueshme të kodit.

Pra, çdo përdorues fundor që përdorte aplikacionin tonë më parë nuk do ta kishte idenë se ne kemi bërë asgjë. Ne nuk i rregulluam gabimet, nuk e bëmë më të shpejtë, nuk shtuam veçori.

Pse të përdoret rifaktorimi

Pra, pse të bëjmë gjithsesi rifaktorim?

Ok, pra, rifaktorimi nukshton veçori, rifaktorimi nuk është të gjesh gabime, rifaktorimi nuk ka të bëjë me performancën, por ne rifaktorojmë thjesht sepse duam t'i bëjmë ato gjëra .

Sepse kodi i strukturuar mirë do ta bëjë shumë më të lehtë shtimin e veçorive të reja dhe aftësive të reja. Do ta bëjë më të lehtë fillimin e analizës së performancës. Pra, ne po rifaktorojmë për të hequr nga rruga pengesat e ardhshme.

Dhe ne bëjmë rifaktorim për një arsye. Nëse nuk ka arsye për të rifabrikuar, atëherë mos e bëj.

Nëse kemi një aplikacion të shkruar dhe të paprekur prej kohësh. Ajo funksionon, është mjaft e shpejtë. Nuk ka asnjë konflikt me asnjë nga sistemet e tyre të tjera dhe nuk ka veçori që duhet të shtohen.

Mund të jetë kodi më i shëmtuar në botë, por nuk ka nevojë të rifaktorohet. Sepse nuk do të ishte arsye për ta bërë këtë.

kulturën e ekipit, shpesh mund të jetë e vështirë që ekipet të marrin miratimin të kalojnë kohë duke rifaktoruar kur nuk është pjesë e kulturës, sepse përfitimet nuk duken menjëherë.

Po, ne nuk po shtojmë veçori, nuk po punojmë për performancën, nuk po rregullojmë defektet, pra pse të shqetësohemi? Ne shqetësohemi që t'i bëjmë ato gjëra më lehtë.

Kur të përdoret rifaktorimi

Rifaktorimi është nuk është një fazë e pavarur.

Kur mësoni për herë të parë rreth rifaktorimit, tingëllon si diçka që bëni si një fazë e pavarur. Që ju shkruani një aplikacion dhe më vonë e rifaktoroni atë.

Epo, mund t'ju duhet ta bëni këtë herë pas here nëse keni një kod ekzistues që është rrëmujë, por qëllimi është që të filloni ta bëni këtë gjatë gjithë kohës.

Kjo ndërsa shkruani kodin, ju rifaktoroni ndërsa shkoni. Ju shkruani një klasë të re ose disa metoda të reja, kontrolloni dhe testoni atë dhe më pas merrni disa minuta për të skanuar dhe për t'u siguruar që është rifaktoruar siç mund të jetë.

Në një mjedis ekipi, një mënyrë e shkëlqyer për të mësuar rifaktorimin është me rishikimet e kodit ose programimin e çiftuar.

Sjellja e grupeve të shumta të syve në të njëjtin kod. Ju gjeni njerëz të ndryshëm që gjejnë mundësi të ndryshme për rifaktorim.

Dhe, nëse jeni një zhvillues i vetëm, duhet t'i kushtoni pak më shumë vëmendje aplikimit të teknikave individuale, veçanërisht atyre për të cilat nuk do të mendonit natyrshëm.

Si të rifaktoroni

⚠ …

Ne nuk do të gërmojmë në secilën teknikë të rifaktorimit, cili është problemi që përpiqet të zgjidhë dhe si ta zbatojmë atë në kod. Shumica e tyre janë të lehta për t'u kuptuar dhe mund t'i gjeni në seksionin "Ku të shkoni më pas" më poshtë. Filloni me teknikat e zakonshme të nivelit të ulët, deri në nivele më të ndryshme.

- Hapat

Së pari, nuk keni nevojë të dini të gjitha rifaktorimet, thjesht filloni t'i përdorni ato.

Në fakt, për t'i mësuar ato mirë, është më praktike të zgjidhni vetëm një grup teknikash dhe të filloni t'i zbatoni ato në mënyrë aktive.

Pasi të mësoni edhe disa nga këto teknika rifaktorimi, do ta gjeni veten duke shkruar natyrshëm kodin më modular, kodin më të mirë të orientuar nga objekti, për të ditur vendin e duhur për të vendosur një pjesë funksionaliteti ose një pjesë të të dhënave.

Pra, si të filloni? filloni nga fundi, niveli më i ulët, rifaktorimet bazë, deri në fund.

Gjëra të tilla si riemërtimi dhe nxjerrja e metodave, shkurtimi i listave të parametrave, minimizimi i tempeve të padobishme, duke i bërë kushtet tuaja më të lehta për t'u lexuar.

Pra, kur po shikoni një pjesë të kodit, thjesht skanoni atë pjesë të tij dy ose tre herë.

Ajo që ju nuk kërkoni është ku mund të aplikoj X teknikën e rifaktorimit.

Ajo që po kërkoni janë gjërat që do t'ju tërheqin vëmendjen. Gjërat që e bëjnë këtë kod ka erë të keqe. Dhe ne e përdorim atë si një tregues se kemi diçka për të përmirësuar. Kjo është ajo që i referohet erërave të kodit.

Pra, kod i kopjuar, një metodë e gjatë, lista të gjata të parametrave, shumë komente dhe "lista vazhdon".

Por, disa erë kodi nuk vijnë nga skanimi, ato do të kërkojnë vëmendje të madhe. Gjëra të tilla si grumbullimet e të dhënave ose vendet për të shtyrë ose tërhequr metodat ose fushat.

Shumë nga IDE-të më të zakonshme të programimit, si Visual Studio, Xcode dhe Eclipse, në fakt do t'ju ndihmojnë të bëni shumë nga këto teknika rifaktorimi.

- Testimi i automatizuar

Po po ndryshojmë kodin dhe kjo sjell rrezik.

Mënyra e vetme më e mirë për të vërtetuar se ndryshimet që bëni kur rifaktoroni bëjnë vetëm atë që keni ndërmend është të keni një grup testesh të automatizuara të njësisë që mund të ekzekutoni në kodin tuaj para dhe pas.

Testimi i automatizuar mund të bëhet duke përdorur një kornizë testimisi Jnit në Java.

Testimi i automatizuar deri në testimin e strategjive të zhvillimit të drejtuar nga zhvillimi ose sjelljes janë jashtëzakonisht plotësuese të rifaktorimit.

Ku të shkoni më pas

Kur jeni të kënaqur me një grup rifaktorimesh dhe dëshironi ta çoni më tej dhe të eksploroni më shumë, atëherë burimet tuaja duhet të përfshijnë absolutisht ““Rifaktorimi duke përmirësuar dizajnin e kodit ekzistues””, nga Martin Fowler.

Ky libër nuk ka për qëllim të lexohet nga fillimi në kopertinë. Shumica e tij është një katalog i rifaktorimeve. Pra, është më shumë një referencë sesa një tutorial.

Faqet e internetitrefactoring.com(lidhur me librin e Martin Fowler) dhe refactoring.gurukanë përmbledhje të shkurtra, me shembuj kodesh.

Dhe ndërsa ndiheni më rehat, mund të dëshironi gjithashtu të kërkoni burime për rifaktorimin në platformën ose mjedisin tuaj. Parimet janë saktësisht të njëjta. Por shpesh ka këshilla dhe truke specifike të platformës.

Faleminderit per leximin! Nëse ju pëlqeu ky artikull, a do të më bënit disa duartrokitje duke klikuar butonin 👏? Ndihmon shumë!