Cum vă simțiți în legătură cu plierea codurilor?

Pentru cei din mediul Visual Studio, cum vă simțiți în legătură cu împachetarea codului din #regions? (sau dacă orice alt IDE are ceva similar ...)

0
fr hi bn
Trebuie să știi când să le ții, să știi când să le dai jos - Kenny Rogers.
adăugat autor Mark Ransom, sursa

24 răspunsuri

Eu folosesc #Region pentru a ascunde codul urât și inutil generat automat, care într-adevăr aparține în partea generată automat a clasei parțiale. Dar, atunci când lucrați cu proiecte vechi sau proiecte modernizate, nu aveți întotdeauna acel lux.

În ceea ce privește alte tipuri de pliere, ori de câte ori funcționează. Dacă numiți bine funcția, nu va trebui niciodată să priviți înăuntru dacă nu încercați ceva sau (re) scrieți.

0
adăugat

Folosesc Textmate (numai Mac), care are codul de pliere și mi se pare foarte util pentru funcțiile de pliere, știu ce funcția "getGet" nu are nevoie, ocupând 10 linii de spațiu de ecran atât de important.

Nu o folosesc niciodată pentru a ascunde o buclă pentru dacă afirmația sau altceva decât dacă arată codul altcuiva unde voi ascunde codul pe care l-au văzut pentru a evita afișarea aceluiași cod de două ori.

0
adăugat

Acest lucru a fost vorba despre Codarea groazei .

Credința mea personală este că acestea sunt utile, dar ca orice exces poate fi prea mult.

Îl folosesc pentru a comanda blocurile de cod în:
Enumerări
Declarații
constructorilor
Metode
Handlers de evenimente
Proprietăți

0
adăugat
Dacă fișierul de clasă este mai ușor de navigat cu siguranță. De obicei, dacă este o clasă scurtă, dar regiunile nu vor ajuta, așa că omiteți-i.
adăugat autor Pat, sursa
Dacă aveți o proprietate pe care o încorporați încă într-un bloc regional? :(
adăugat autor Jon Tackabury, sursa
Nu este un articol foarte inteligent.
adăugat autor aehlke, sursa

Prefer clasele parțiale, spre deosebire de regiuni.

Folosirea pe scară largă a regiunilor de către alți oameni îmi dă impresia că cineva, undeva, încalcă principiul unic al responsabilității și încearcă să facă prea multe lucruri cu un singur obiect.

0
adăugat

Chiar nu am o problemă cu utilizarea #region pentru a organiza codul. Personal, de obicei, configurez diferite regiuni pentru lucruri cum ar fi proprietăți, gestionarea evenimentelor și metode publice / private.

0
adăugat

În general, găsesc că atunci când se ocupă de coduri precum Evenimentele din C# unde există aproximativ 10 rânduri de cod care sunt de fapt doar o parte a unei declarații de eveniment (clasa EventArgs declarația delegatului și declarația de eveniment) Punerea unei regiuni în jurul lor și apoi împălțarea a modului de ao face mai ușor de citit.

0
adăugat

În timp ce înțeleg problema că Jeff, et. Al. aveți cu regiunile, ceea ce nu înțeleg este motivul pentru care ați lovit CTRL + M , CTRL L pentru a extinde toate regiunile într-un fișier este atât de dificil de rezolvat.

0
adăugat

Prefer eu însumi #regiuni, dar un coleg vechi nu a putut să stea pentru a ascunde lucrurile. Am înțeles punctul său de vedere când am lucrat la o pagină cu 7 #regiuni, dintre care cel puțin 3 au fost generate automat și au același nume, dar în general cred că sunt o modalitate utilă de a împărți lucrurile și de a păstra totul mai puțin aglomerat.

0
adăugat

Cred că este un instrument util, atunci când este folosit corect. În multe cazuri, simt că metode și enumerări și alte lucruri care sunt adesea pliate ar trebui să fie mici cutii negre. Dacă nu trebuie să le priviți din vreun motiv, conținutul lor nu contează și ar trebui să fie cât mai ascuns posibil. Cu toate acestea, nu am niciodată fold metode private, comentarii, sau clase interioare. Metodele și enumele sunt singurele lucruri pe care le am.

0
adăugat

Eclipse face unele dintre acestea în Java (sau PHP cu plugin-uri) pe cont propriu. Vă permite să pliați funcții și altele asemenea. Tind să-mi plac. Dacă știu ce face o funcție și nu lucrez la ea, nu trebuie să mă uit la ea.

0
adăugat

Plierea regiunilor ar fi bine dacă nu ar fi trebuit să mențin grupuri regionale pe baza caracteristicilor codului meu care sunt intrinseci limbii. De exemplu, compilatorul știe deja că este un constructor. Modelul codului IDE știe deja că este un constructor. Dar dacă vreau să văd o imagine a codului în care constructorii sunt grupați împreună, din anumite motive trebuie să reafirm că aceste lucruri sunt constructori, prin plasarea lor fizică și apoi punerea unui grup în jurul lor. Același lucru este valabil și pentru orice altă modalitate de a tăia o clasă / struct / interfață. Ce se întâmplă dacă mă răzgândesc și vreau să văd mai întâi chestiile publice / protejate / private separate în grupuri și apoi grupate după tipul de membru?

Utilizarea regiunilor pentru a marca proprietățile publice (de exemplu) este la fel de proastă ca introducerea unui comentariu redundant care nu adaugă nimic la ceea ce este deja detectabil din codul însuși.

Oricum, pentru a evita să folosesc regiuni în acest scop, am scris un add-in Visual Studio 2008 IDE, gratuit, numit Ora. Acesta oferă o vizualizare grupată în mod automat, ceea ce face mult mai puțin necesară menținerea grupării fizice sau utilizarea regiunilor. Este posibil să vi se pară utilă .

0
adăugat

Eu personal folosesc #Regions tot timpul. Mi se pare că mă ajută să păstrez lucruri ca proprietăți, declarații etc. separate de fiecare alte.

Acesta este probabil un răspuns bun!

Codarea groazei

Ed: Dang, Pat ma bătut la asta!

0
adăugat

Regiunile nu trebuie folosite niciodată în cadrul metodelor. Acestea pot fi folosite pentru a grupa metode, dar acest lucru trebuie tratat cu precauție extremă, astfel încât cititorul codului să nu devină nebun. Nu are nici un rost în metodele de pliere de către modificatorii lor. Dar uneori plierea poate crește lizibilitatea. De ex. gruparea unor metode pe care le utilizați pentru a lucra în jurul unor probleme atunci când utilizați o bibliotecă externă și nu veți dori să vizitați prea des poate fi de ajutor. Dar coderul trebuie să caute întotdeauna soluții cum ar fi înfășurarea bibliotecii cu clase adecvate în acest exemplu particular. Când toate celelalte nu reușesc, utilizați plierea pentru a îmbunătăți lizibilitatea.

0
adăugat

@Tom

Sunt furnizate clase parțiale, astfel încât să puteți separa codul generat de un instrument de la orice personalizări pe care ar trebui să le faceți după ce genul genului a făcut biții. Aceasta înseamnă că codul dvs. rămâne intact după ce reporniți codul și nu se suprascrie. Ăsta este un lucru bun.

0
adăugat

9 out of 10 times, code folding means that you have failed to use the SoC principle for what its worth.
I more or less feel the same thing about partial classes. If you have a piece of code you think is too big you need to chop it up in manageable (and reusable) parts, not hide or split it up.
It will bite you the next time someone needs to change it, and cannot see the logic hidden in a 250 line monster of a method.

Whenever you can, pull some code out of the main class, and into a helper or factory class.

foreach (var item in Items)
{
    //.. 100 lines of validation and data logic..
}

nu este la fel de lizibil ca

foreach (var item in Items)
{
    if (ValidatorClass.Validate(item))
        RepositoryClass.Update(item);
}



My $0.02 anyways.

0
adăugat
Este adevărat. Dacă proiectați o clasă într-un mod care vă forțează să o împărțiți în mai multe fișiere pentru a fi citite, ați reușit.
adăugat autor Lars Mæhlum, sursa
LongTTH: Nu doriți cursuri parțiale, doriți compoziția mai multor clase.
adăugat autor Lars Mæhlum, sursa
M-am gândit că clasele parțiale erau în principal acolo pentru a oferi o modalitate sigură de a adăuga funcționalitate la codul generat?
adăugat autor Matt Sach, sursa
Nu cred, Java nu suportă clasa parțială ca dotNet, atunci gândește-te la ceea ce trebuie să faci cu un GUI complex.
adăugat autor Luke, sursa

Codarea Horror articol actual m-am gândit la acest lucru de asemenea.

În general, eu clase mari voi pune o regiune în jurul variabilelor membre, constante și proprietăți pentru a reduce cantitatea de text pe care trebuie să o parcurg și să las totul în afara unei regiuni. Pe formulare, în general, voi grupa lucrurile în "variabilele membre, constantele și proprietățile", funcțiile de formă și manipulatorii de evenimente. Încă o dată, acest lucru este mai mult, nu trebuie să parcurg o mulțime de text atunci când vreau doar să revizuiesc anumiți agenți de procesare a evenimentelor.

0
adăugat

Eu personal urăsc regiuni. Singurul cod care ar trebui să fie în regiuni în opinia mea este codul generat. Când deschid fișierul, întotdeauna încep cu Ctrl + M + O. Aceasta se îndoaie la nivelul metodei. Când aveți regiuni, nu vedeți decât numele regiunilor.

Înainte de a verifica metodele / câmpurile grupului logic, astfel încât să fie bine după Ctrl + M + O. Dacă aveți nevoie de regiuni, trebuie să aveți multe linii în clasă. De asemenea, consider că acest lucru este foarte comun.

Această regiune se așteaptă să fie foarte bine

// gunoi total, fără structură aici

endregion

0
adăugat

Folosirea regiunilor (sau codul de pliere altfel) ar trebui să nu aibă nimic de-a face cu mirosurile de cod (sau să le ascundă) sau orice altă idee de ascundere a codului pe care nu doriți ca oamenii să le "văd" ușor.

Regiunile și plierea codurilor sunt într-adevăr despre furnizarea unei modalități de a grupa cu ușurință secțiuni de cod care pot fi colaps / pliate / ascunse pentru a minimiza cantitatea de "zgomot" străin în jurul a ceea ce lucrați în prezent. Dacă setați lucrurile în mod corect (ceea ce înseamnă că numele dvs. este ceva util, cum ar fi numele metodei conținute), atunci puteți restrânge totul cu excepția funcției pe care o editați în prezent și păstrați încă un anumit nivel de context fără a trebui să vedeți de fapt cealaltă linii de cod.

Probabil că ar trebui să existe câteva linii directoare de tip best practice în jurul acestor idei, dar folosesc extensiv regiuni pentru a furniza o structură standard fișierelor mele de cod (evenimente de grup, câmpuri la nivel de clasă, proprietăți / metode private, proprietăți / metode publice). Fiecare metodă sau proprietate are, de asemenea, o regiune, în care numele regiunii este numele metodei / proprietății. Dacă am o grămadă de metode supraîncărcate, numele regiunii este semnătura completă și apoi întregul grup este înfășurat într-o regiune care este doar numele funcției.

0
adăugat

Abordarea mea este similară cu câteva altele, folosind regiuni pentru a organiza blocuri de coduri în constructori, proprietăți, evenimente etc.

Există un set excelent de macrocomenzi VS.NET oferit de Roland Weigelt de la intrarea pe blog, Sprijin pentru tastatură mai bună pentru #region ... #endregion . Eu le-am folosit de ani de zile, mapând ctrl +. pentru a restrânge regiunea curentă și ctrl ++ pentru ao extinde. Găsiți că funcționează mult mai bine decât funcția implicită VS.NET care folosește / dezactivează totul.

0
adăugat

Emacs are un mod minor pliabil, dar o fac doar ocazional. Mai ales când lucrez la unele monstruozități moștenite de la un alt fizician care evident avea mai puțină instruire sau mai puțin grijă de practicile sale de codificare.

0
adăugat

Uneori vă puteți găsi că lucrați la o echipă în care # regiunile sunt încurajate sau necesare. Daca esti ca mine si nu poti sa stai in mana cu cod pliat poti opri conturul pentru C #:

  1. Options -> Text Editor -> C# -> Advanced Tab
  2. Uncheck "Enter outlining mode when files open"
0
adăugat
Glorios! Pur și simplu Glorios.
adăugat autor Gavin Miller, sursa

Aceasta este doar una dintre acele discuții prostești care nu duc spre nicăieri. Dacă vă place regiunile, utilizați-le. Dacă nu, configurați editorul pentru a le dezactiva. Acolo, toată lumea este fericită.

0
adăugat
Nu sunt de acord. Nici o discuție care îi face pe oameni să nu creadă despre ce fac ceva (probabil de ce au făcut ceva de mult timp) și să evalueze modalități mai bune de a lucra în viitor, nu duce nicăieri.
adăugat autor Mike Hofer, sursa

Nu sunt un fan al claselor parțiale - încerc să-mi dezvolt cursurile astfel încât fiecare clasă să aibă o problemă foarte clară, unică, pentru care este responsabilă. În acest scop, nu cred că ceva cu o responsabilitate clară ar trebui împărțit în mai multe fișiere. De aceea nu-mi plac orele parțiale.

Cu asta am spus că sunt pe gardul cu regiuni. În cea mai mare parte, nu le folosesc; cu toate acestea, lucrez cu cod în fiecare zi care include regiuni - unii oameni merg foarte greu pe ei (plierea metodelor private într-o regiune și apoi fiecare metodă pliată în propria regiune), iar unii oameni luminează asupra lor (pliante enums, atribute pliante, etc). Regula generală de deget, de acum, este că aș pune cod doar în regiuni dacă (a) datele ar putea să rămână statice sau nu vor fi atinse foarte des (cum ar fi enums) sau (b) dacă există metode care sunt implementate din necesitate datorită subclasării sau implementării metodei abstracte, dar, din nou, nu vor fi atinse foarte des.

0
adăugat

enumerările

Proprietăți

.ctors

metode

Manageri de evenimente

That's all I use regions for. I had no idea you could use them inside of metode.

Sună ca o idee teribilă :)

0
adăugat