Codul miroase și refactorizările lor pot fi foarte descurajante și intimidante pentru începători. Deci, în această serie, am încercat să le fac mai ușor de înțeles, atât pentru dezvoltatorii Ruby puțin experimentați, cât și pentru începători.
Acest articol final menționează câteva mirosuri pe care ar trebui să le priviți și rezumă ceea ce această serie mică dorea să realizeze. O miros finală, dacă îți place ...
Ultimul articol din această serie este ceva asemănător unei runde bonus. Voiam să vă prezint câteva mirosuri care pot fi abordate rapid și fără prea multă agitație. Unul pentru drum, ca să spun așa. Cred că, odată cu cunoștințele pe care le-ați adunat din articolele anterioare, majoritatea nu vor avea nici măcar exemple de cod pentru a vă împacheta capul.
Când deschideți o carte despre refactorizare, veți găsi cu ușurință mai multe mirosuri decât am discutat. Cu toate acestea, cu acești majori sub centură, veți fi bine pregătiți să vă ocupați de oricare dintre ele.
Comentariile aplicate cu generozitate sunt rareori o idee bună - probabil niciodată. De ce nu? Pentru că ar putea sugera că designul tău nu vorbește de la sine. Asta înseamnă că codul dvs. este probabil atât de complicat pentru a înțelege că are nevoie de explicații literale.
În primul rând, cine vrea să treacă prin tezaure de text în codul dvs. - sau, mai rău, prin cod greu de înțeles. Jackpot dacă ambele sunt un eveniment comun. Aceasta este doar o formă proastă și nu este foarte sociabilă de oamenii care vin după tine - fără infracțiuni, masochiști, torturați-vă viitorul în sine tot ce vreți.
Vreți să scrieți un cod care este suficient de expresiv în sine. Creați clase și metode care vorbesc de la sine. În cel mai bun scenariu, ei spun o poveste ușor de urmărit. Acesta este probabil unul dintre motive convenții asupra configurațiilor a devenit atât de influent. Reintroducerea roții este uneori o bună practică pentru a vă îmbunătăți înțelegerea și pentru a explora un nou teritoriu, dar în medii de dezvoltare cu ritm rapid, colegii dvs. caută claritate și navigare rapidă - nu numai în fișierele dvs., ci și în harta mentală pe care o creați în codul dvs..
Nu vreau să mă duc într-un subiect cu totul nou, dar numirea joacă un rol important în toate acestea. Și comentarea excesivă în cadrul codului dvs. contrazice ușor practicile și convențiile de numire. Nu mă înțelegeți greșit, este bine să adăugați comentarii - stați pe calea care "luminează" codul dvs., mai degrabă decât distrage atenția de la acesta. Comentariile nu ar trebui să fie instrucțiuni pentru cod inteligent pe care le puteți descifra mai ales pentru că ați vrut să vă prezentați. Dacă vă păstrați metodele simple - așa cum ar trebui - și numiți totul cu atenție, atunci aveți nevoie de puțin să scrieți romane întregi între codul dvs..
Stați departe de următoarele:
De asemenea, este util să rupem anumite părți ale metodelor prin metoda extracției și oferind acestei părți a metodei un nume care ne spune despre responsabilitatea sa - mai degrabă decât să avem toate detaliile într-o înțelegere la nivel înalt a ceea ce se întâmplă în cadrul corpului metodei.
def create_new_agent ... end ... # creați un agent nou vizitați root_path click_on 'Creare agent' fill_in 'Nume agent', cu: 'Jinx' fill_in 'Email', cu: '[email protected]' fill_in 'Password', with: 'secretphrase 'click_button' Trimite '...
Ce este mai ușor de citit? Un brainer, desigur! Utilizați kilometrajul gratuit pe care îl obțineți numind lucruri în mod corespunzător prin metode extrase. Ea vă face codul mult mai inteligent și mai ușor de digerat - plus beneficiile refactorizării într-un singur loc dacă sunt refolosite, bineînțeles. Pun pariu că acest lucru va ajuta la reducerea comentariilor dvs. cu o sumă foarte semnificativă.
Acesta este unul simplu. Nu utilizați callback-uri care nu sunt legate de logica persistenței! Obiectele dvs. au un ciclu de viață de persistență, care creează, salvează și șterg obiecte, ca să spunem așa - și nu doriți să "poluezi" acea logică cu alte comportamente, cum ar fi logica de afaceri a clasei dvs..
Ține-o simplă, îți amintești? Exemple tipice despre ceea ce trebuie evitat sunt trimiterea de e-mailuri, procesarea plăților și altele. De ce? Deoarece depanarea și refactorizarea codului dvs. ar trebui să fie cât mai ușoară posibil și apelurile de apel dezordonate au o reputație de a interfera cu aceste planuri. Întoarcerile de zboruri fac să fie un pic prea ușor pentru a noroi apele și pentru a vă împușca în picior de mai multe ori.
Un alt aspect problematic cu privire la apelurile telefonice este acela că pot ascunde implementarea logicii de afaceri în metode precum #Salvați
sau #crea
. Deci, nu fi leneș și abuzează-le doar pentru că pare convenabil!
Cea mai mare preocupare este cuplarea preocupărilor, bineînțeles. De ce să lăsați metoda de creare a SpectreAgent
, de exemplu, să se ocupe de livrarea unui a #mission_assignment
sau ceva? Atât de des, doar pentru că o putem face - cu ușurință - nu înseamnă că ar trebui. Este o mușcătură garantată în fund ce așteaptă să se întâmple. Soluția este de fapt destul de simplă. Dacă comportamentul unui apel invers nu are nimic de-a face cu persistența, creați pur și simplu o altă metodă pentru aceasta și ați terminat.
Alegerile rău numire au consecințe grave. De fapt, pierzi timpul altuia - sau chiar mai bine propriul dvs., dacă trebuie să revedeți acea bucată de cod în viitor. Codul pe care îl scrieți este un set de instrucțiuni care trebuie citite de dvs. și de alte persoane, astfel încât o abordare pur logică, superprozaică, prea inteligentă sau mai rău, o simplă leneșă de a numi lucrurile este unul dintre cele mai grave lucruri pe care le puteți lăsa în urmă. Scopul este de a face codul mai ușor de înțeles prin furnizarea de nume mai bune.
Claritatea trumpește inteligența falsă sau concisitatea inutilă în orice zi a săptămânii! Lucrează din greu pentru a numi metode, variabile și clase care fac ușor să urmezi un fel de fir.
Nu vreau să merg atât de departe încât să spun că ar trebui să încerci să spui o poveste, dar dacă poți, du-te! Mașinile nu sunt cele care trebuie să "citească" codul dvs. - desigur, este condus de ei. Poate că acesta este unul dintre motivele pentru care termenul "Software Writer" mi-a crescut puțin în ultima vreme. Nu spun că aspectul tehnic ar trebui să fie diminuat, dar scrierea de software este mai mult decât scrierea unor instrucțiuni fără suflet pentru mașini - cel puțin software-ul elegant și care scânteiește bucuria de a lucra cu.
Nu vă faceți griji dacă acest lucru se dovedește a fi mult mai dificil decât v-ați gândit. Namingul este notoriu greu!
Amestecurile sunt un miros? Să zicem că pot fi mirositori. Moștenirea multiplă prin mixuri poate fi utilă, dar există câteva lucruri care le fac mai puțin folositoare decât ați fi crezut atunci când ați început cu OOP:
Vă sugerez să citiți puțin despre "Compoziția peste moștenire". În esență, trebuie să vă bazați mai mult pe refolosirea propriilor clase, în mod separat, decât asupra moștenirii sau subclasării. Amestecurile sunt o formă de moștenire care poate fi folosită, dar și ceva despre care ar trebui să fii puțin suspicios.
Aveți grijă să transmiteți în mod repetat aceleași argumente multiple în metodele dvs. Asta deseori sugerează că au o relație care poate fi extrasă într-o clasă proprie - care, la rândul său, poate simplifica drastic alimentarea acestor metode cu date prin reducerea mărimii argumentelor. Indiferent dacă merită să introduceți o nouă dependență, trebuie să cântăriți.
Acest miros este o altă formă de duplicare subtilă pe care o putem face mai bine. Un bun exemplu este trecerea unei liste lungi de argumente care compun o adresă și informații despre cartea de credit. De ce nu împachetați toate acestea într-o clasă existentă sau extrageți mai întâi o clasă nouă și treceți în loc de obiectele cărții de credit și adresa? O altă modalitate de a gândi este să aveți un obiect de domeniu în loc de început și de sfârșit. Dacă aveți variabile de exemplu care cad pentru acest miros, atunci extragerea unei clase merită luată în considerare. În alte cazuri, a parametru obiect ar putea oferi aceeași calitate a abstractizării.
Veți ști că ați obținut o mică victorie dacă sistemul dvs. este mai ușor de înțeles și ați găsit un nou concept de card de credit - pe care îl puteți încapsula într-un obiect.
Felicitări! V-ați îndreptat în mod semnificativ abilitățile dvs. OOP! Nivelul statutului de boss se apropie. Nu, serios, o treabă bună dacă întregul subiect a fost mai degrabă nou pentru tine!
Ca o recomandare finală, vreau să renunți la un singur lucru. Rețineți că nu există rețetă care să funcționeze întotdeauna. Va trebui să cântăriți fiecare problemă în mod diferit și de multe ori să amestecați diferite tehnici pentru a se potrivi nevoilor dvs. De asemenea, pentru restul carierei tale, este cel mai probabil ceva la care nu vei înceta niciodată să te lupți - cred că o luptă bună, totuși, una creativă și provocatoare.
Acesta este un pic de ghici, dar simt că dacă ați înțeles majoritatea subiectelor pe care le-am abordat, veți fi pe cale să scrieți codul pe care alți dezvoltatori doriți să-l descoperiți. Vă mulțumim pentru timpul pe care l-ați citit această serie mică și norocul devenind un hacker fericit!