{"id":986,"date":"2015-03-29T22:59:24","date_gmt":"2015-03-29T19:59:24","guid":{"rendered":"http:\/\/facemsoft.ro\/?p=986"},"modified":"2020-08-17T17:55:41","modified_gmt":"2020-08-17T14:55:41","slug":"clean-code-episodul-2","status":"publish","type":"post","link":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/","title":{"rendered":"Clean Code &#8211; Episodul 2"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"986\" class=\"elementor elementor-986\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-hwmqu1u elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"hwmqu1u\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-lzw1cw7\" data-id=\"lzw1cw7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5mhms4k elementor-widget elementor-widget-video\" data-id=\"5mhms4k\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/CleanCode2.png&quot;,&quot;id&quot;:987,&quot;size&quot;:&quot;&quot;},&quot;lightbox&quot;:&quot;yes&quot;,&quot;youtube_url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/watch?v=CtgPQX5ZppQ&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-lightbox\">\n\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox=\"{&quot;type&quot;:&quot;video&quot;,&quot;videoType&quot;:&quot;youtube&quot;,&quot;url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/embed\\\/CtgPQX5ZppQ?feature=oembed&amp;start&amp;end&amp;wmode=opaque&amp;loop=0&amp;controls=1&amp;mute=0&amp;rel=0&amp;cc_load_policy=0&quot;,&quot;autoplay&quot;:&quot;&quot;,&quot;modalOptions&quot;:{&quot;id&quot;:&quot;elementor-lightbox-5mhms4k&quot;,&quot;entranceAnimation&quot;:&quot;&quot;,&quot;entranceAnimation_tablet&quot;:&quot;&quot;,&quot;entranceAnimation_mobile&quot;:&quot;&quot;,&quot;videoAspectRatio&quot;:&quot;169&quot;}}\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJ0eXBlIjoidmlkZW8iLCJ2aWRlb1R5cGUiOiJ5b3V0dWJlIiwidXJsIjoiaHR0cHM6XC9cL3d3dy55b3V0dWJlLmNvbVwvZW1iZWRcL0N0Z1BRWDVacHBRP2ZlYXR1cmU9b2VtYmVkJnN0YXJ0JmVuZCZ3bW9kZT1vcGFxdWUmbG9vcD0wJmNvbnRyb2xzPTEmbXV0ZT0wJnJlbD0wJmNjX2xvYWRfcG9saWN5PTAiLCJhdXRvcGxheSI6IiIsIm1vZGFsT3B0aW9ucyI6eyJpZCI6ImVsZW1lbnRvci1saWdodGJveC01bWhtczRrIiwiZW50cmFuY2VBbmltYXRpb24iOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl90YWJsZXQiOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl9tb2JpbGUiOiIiLCJ2aWRlb0FzcGVjdFJhdGlvIjoiMTY5In19\">\n\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"755\" height=\"510\" src=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/03\/CleanCode2.png?fit=755%2C510&amp;ssl=1\" class=\"attachment-full size-full wp-image-987\" alt=\"Clean Code curs 2\" srcset=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/03\/CleanCode2.png?w=755&amp;ssl=1 755w, https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/03\/CleanCode2.png?resize=300%2C203&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-play\" role=\"button\" aria-label=\"Play Video\" tabindex=\"0\" data-no-translation-aria-label=\"\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"eicon-play\"><\/i>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-25ae91d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"25ae91d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c84ff7d\" data-id=\"c84ff7d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a7676fb elementor-widget elementor-widget-spacer\" data-id=\"a7676fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7195ff3 elementor-widget elementor-widget-heading\" data-id=\"7195ff3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Transcriere<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5e99ad elementor-widget elementor-widget-text-editor\" data-id=\"f5e99ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span>Haide\u021bi s\u0103 continu\u0103m ce discutam \u00een episodul precedent.<\/span><\/h3>\n<h3><span>Single Responsability Principle &#8211; Principiul responsabilit\u0103\u021bii unice. Asta presupune ca o clas\u0103 s\u0103 aib\u0103 \u00eentotdeauna o singur\u0103 responsabilitate \u0219i numai una. Deci s\u0103 nu facem clase din acelea de tipul Utility, nu \u0219tiu ce Manager, \u00een care punem ni\u0219te metode care trebui s\u0103 fie a\u0219a generale, dar nu au loc pe niciunde. \u0218i se face un fel de zon\u0103 global\u0103 din programarea structural\u0103. Deci, ca la C, acolo aveam func\u021bii \u0219i zon\u0103 global\u0103. Aici tr\u00e2ntim tot ce e global. Nu. Orice \u00een programarea orientat\u0103 obiect, \u0219i aici vorbim de clean code \u00een programarea orientat\u0103 obiect, orice trebuie s\u0103 fie inclus \u00eentr-o clas\u0103. Nu avem voie s\u0103 scriem cod \u00een afara claselor \u0219i codul scris \u00eentr-o clas\u0103 trebuie s\u0103 aib\u0103 neap\u0103rat leg\u0103tur\u0103 cu acea clas\u0103.<\/span><\/h3>\n<h3><span>\u00cen plus, mai avem problema, c\u0103 orice schimbare de specifica\u021bii va duce la inutilitatea acestei clase \u0219i la rescrierea \u00eentregului cod surs\u0103, pentru c\u0103 g\u00e2ndind-o prost de la \u00eenceput, nerespect\u00e2nd principiile de clean code \u0219i design patterns, o s\u0103 v\u0103 amintesc \u0219i mai t\u00e2rziu de design patterns, codul meu nu este u\u0219or mentenabil. Adic\u0103, la ce mai mic\u0103 schimbare de specifica\u021bii o s\u0103 m\u0103 trezesc c\u0103 trebuie s\u0103 rescriu tot programul.<\/span><\/h3>\n<h3><span>Open-Closed Principle &#8211; Principiul \u00eenchis-deschis. Acesta spune c\u0103 o clas\u0103 trebuie s\u0103 fie deschis\u0103 pentru extensii adic\u0103 pentru a-i ad\u0103uga membri sau metode \u00een plus, pentru a deriva din ea, dar trebuie s\u0103 fie \u00eenchis\u0103 pentru modific\u0103ri. Adic\u0103 la modificarea specifica\u021biilor, atunci c\u00e2nd primesc noi specifica\u021bii sau clasa mea trebuie s\u0103 fac\u0103 lucruri \u00een plus, acest lucru \u00eel va face primind noi membri \u0219i noi metode sau deriv\u00e2nd din aceast\u0103 clas\u0103, dar niciodat\u0103 modific\u00e2nd codul deja existent. E un \u201ebest practice\u201d, un obicei prost s\u0103 modific cod existent \u00een clas\u0103, cel mai ok e ca la specifica\u021bii s\u0103 scriu clasa \u00een a\u0219a fel \u00eenc\u00e2t, ca la modificarea specifica\u021biilor s\u0103 trebuiasc\u0103 doar s\u0103 adaug chestii \u00een ea, s\u0103 fie deschis\u0103 pentru extensii.<\/span><\/h3>\n<h3><span>Liskov Substitution Principle &#8211; Principiul substitu\u021biei lui Liskov, ce spune c\u0103 obiectele pot fi \u00eenlocuite oric\u00e2nd cu instan\u021be ale claselor derivate, f\u0103r\u0103 ca acest lucru s\u0103 afecteze func\u021bionalitatea. Probabil \u0219ti\u021bi c\u0103 \u00een majoritatea limbajelor orientate obiect avem de-a face cu no\u021biunea de clas\u0103 abstract\u0103 \u0219i interfa\u021b\u0103. \u0218i totu\u0219i \u0219i clase derivate din clasele abstracte, func\u021bii virtuale \u0219i a\u0219a mai departe. Acestea nu fac obiectul acestui tutorial, \u00eens\u0103 dac\u0103 sunte\u021bi st\u0103p\u00e2n pe ele, realiza\u021bi c\u0103 acest principiu are o fundamentare destul de mare \u00een programarea orientat\u0103 obiect. \u0218i anume, \u00eentotdeauna c\u00e2nd scriu o clas\u0103, de exemplu am clasa Student care e derivat\u0103 din clasa Persoan\u0103. C\u00e2nd scriu o clas\u0103 care prelucreaz\u0103 persoane, clasa respectiv\u0103 trebuie s\u0103 \u0219tie s\u0103 prelucreze \u0219i studen\u021bi, e obligatoriu. \u00cen limbaje chestia asta e introdus\u0103 aproape nativ. Problema se pune la interfe\u021be. Interfa\u021ba, v\u0103 reamintesc, e o clas\u0103 ce nu are membri, ci are doar ni\u0219te metode ce nu sunt implementate, ele sunt doar, le sunt doar definite signatura sau prototipul, ce returneaz\u0103, ce parametri prime\u0219te. \u0218i oric\u00e2nd derivez o clas\u0103 dintr-o interfa\u021b\u0103, sunt obligat s\u0103 implementez toate acele metode. Ideea e c\u0103, dac\u0103 eu fac o metod\u0103 care prime\u0219te o interfa\u021b\u0103 ca \u0219i parametru, indiferent de ce instan\u021ba, de ce clas\u0103 derivat\u0103 din acea interfa\u021b\u0103 vorbesc, \u0219i o dau drept parametru, ea va trebui s\u0103 \u0219tie s\u0103 o prelucreze.<\/span><\/h3>\n<h3><span>\u0218i ajungem la o alt\u0103 chestie sau o alt\u0103 no\u021biune, oarecum valabil\u0103 \u0219i pentru design patterns \u0219i anume \u201edesign by contract\u201d sau dezvoltarea bazat\u0103 pe contracte. Asta e acela\u0219i lucru ca \u0219i abonamentul nostru la telefon, sau e inspirat\u0103 din via\u021ba real\u0103. Ca atunci c\u00e2nd mergem s\u0103 ne facem un abonament la telefon, ca atunci c\u00e2nd mergem s\u0103 \u00eenchiriem un apartament. Ce facem? Semn\u0103m un contract. \u00cen acel contract noi ne angaj\u0103m c\u0103 pl\u0103tim chiria sau, respectiv, abonamentul la telefon, firma de telefonie sau proprietarul se angajeaz\u0103 c\u0103 ne pune la dispozi\u021bie apartamentul, respectiv c\u0103 ne pune la dispozi\u021bie servicii de telefonie mobil\u0103. Cam acela\u0219i lucru se transpune \u0219i \u00een cod, adic\u0103, contractul e o interfa\u021b\u0103, care d\u0103 anumite comportamente. V\u0103 amintesc c\u0103 \u00een C# interfe\u021bele erau cu \u201eI\u201d \u00een fa\u021b\u0103 \u0219i aveam IEnumerable, ISearizable, adic\u0103 d\u0103deam un comportament de enumerabil, de serializabil, \u00een Java sunt f\u0103r\u0103 \u201eI\u201d \u00een fa\u021b\u0103 dar cu \u201eable\u201d la sf\u00e2r\u0219it, de exemplu Runnable ce face din acea clas\u0103 o clas\u0103 cu cod ce poate fi executat pe mai multe fire de execu\u021bie. Ei, \u0219i interfa\u021ba stabile\u0219te contractul. Spune c\u0103, dac\u0103 vrei s\u0103 derivezi, tu ca \u0219i clas\u0103, dac\u0103 vrei s\u0103 fii derivat\u0103 din mine, atunci e\u0219ti obligat\u0103 s\u0103 implementezi aceste func\u021bii.<\/span><\/h3>\n<h3><span>Pe de alt\u0103 parte \u0219i astea sunt condi\u021biile puse de interfa\u021b\u0103, condi\u021biile puse de clas\u0103 sunt simple. Deci dac\u0103 pentru o interfa\u021b\u0103 acest lucru e dat de faptul c\u0103 acea clas\u0103 derivat\u0103 e obligat\u0103 s\u0103 le implementeze, clasa derivat\u0103 poate la fel de bine s\u0103 \u00ee\u0219i adauge \u0219i lucruri \u00een plus, adic\u0103 trebuie s\u0103 respecte contractul, dar ce-i pe l\u00e2ng\u0103, c\u0103 \u0219i la mine dac\u0103 \u00eemi fac un abonament la o firm\u0103 de telefonie mobil\u0103, dac\u0103 prin contract nu sunt obligat s\u0103 nu-mi fac \u0219i la alta, pot s\u0103 \u00eemi fac \u0219i la alt\u0103 firm\u0103 de telefonie mobil\u0103. La fel \u0219i aici, pot s\u0103 derivez din oric\u00e2te interfe\u021be vreau eu, dac\u0103 clasa mea \u0219tiu c\u0103 va respecta toate contractele.&nbsp;<\/span><\/h3>\n<h3><span>\u0218i oarecum, adic\u0103 acest principiu design by contract se aplic\u0103 \u0219i la Interface Segregation Principle, sau principiul interfe\u021belor segregate. Asta ce \u00eenseamn\u0103, c\u0103 oric\u00e2nd prefer mai multe interfe\u021be specializate dec\u00e2t o singur\u0103 interfa\u021b\u0103 mare, adic\u0103 la fel ca \u0219i \u00een cazul meu, prefer s\u0103 am mai multe abonamente, fiecare cu clauze exacte c\u0103tre telefonia mobil\u0103, c\u0103tre cei care mi-au \u00eenchiriat apartamentul, c\u0103tre cei de la care am energie electric\u0103, dec\u00e2t s\u0103 am un singur contract mare. Adic\u0103 a\u0219 prefera s\u0103 fac cu proprietarul un contract prin care m\u0103 oblig s\u0103 \u00eei dau chiria, cu cei de la curent electric un contract prin care m\u0103 oblig s\u0103 pl\u0103tesc curentul, cu cei de la telefonie prin care m\u0103 oblig s\u0103 pl\u0103tesc telefonul, dec\u00e2t s\u0103 fac un singur contract cu proprietarul \u00een care sunt specificate \u0219i curentul \u0219i telefonul \u0219i toate astea. E mai mult\u0103 b\u0103taie de cap \u0219i am mai multe chestii de \u00eendeplinit. Plus c\u0103 dac\u0103 m\u0103 sup\u0103r \u0219i nu mai vreau telefonie de la un anumit operator, va trebui s\u0103 vorbesc cu proprietarul s\u0103 modifice \u00een acel contract mare doar clauza asta, cu telefonia mobil\u0103. Pe c\u00e2nd dac\u0103 chestiile astea sunt separate, m\u0103 duc la operatorul respectiv, \u00eenchid contractul, m\u0103 duc la alt operator \u0219i \u00eemi fac alt contract.&nbsp;<\/span>La fel cum spun \u0219i aici, nu risc\u0103m astfel ca prin modificarea contractului unui client s\u0103 modific\u0103m \u0219i contractele altor clien\u021bi (ceea ce fac de obicei operatorii de telefonie mobil\u0103, dac\u0103 st\u0103m bine s\u0103 ne g\u00e2ndim, dar \u00een fine). Adic\u0103, modific\u0103m interfa\u021ba aia masiv\u0103, modific\u00e2nd doar o bucat\u0103 din interfa\u021ba aia masiv\u0103, asta \u00eenseamn\u0103 c\u0103 risc\u0103m oarecum s\u0103 modific\u0103m \u0219i buc\u0103\u021bi din clasele derivate efectiv, chiar dac\u0103 nu am intuit acest lucru sau nu \u0103sta era scopul nostru.<\/h3>\n<h3>\u0218i ajungem la ultimul principiu din SOLID, Dependency Inversion Principle sau Principiul dependen\u021bei inversate. Asta \u00eemi spune c\u0103 o clas\u0103 trebuie s\u0103 depind\u0103 tot timpul de abstractiz\u0103ri, niciodat\u0103 de obiecte concrete. Adic\u0103, o clas\u0103 trebui s\u0103 depind\u0103 de interfa\u021ba din care e derivat\u0103, niciodat\u0103 de un obiect de tipul respectiv. \u0218i un caz practic al Dependency Inversion e Dependency Injection, ce permite cuplarea slab\u0103 a serviciilor de clien\u021bi poate a\u021bi auzit de Dependency Injection, el e folosit \u00een AngularJS. AngularJS e o modalitate de a face binding pe client, e o libr\u0103rie JavaScript creat\u0103 de Google, de fapt, e mai mult dec\u00e2t o libr\u0103rie, dac\u0103 sunte\u021bi interesa\u021bi pute\u021bi c\u0103uta pe internet despre Dependency Injection \u0219i despre AngularJS. \u00cen principiu ce \u00eenseamn\u0103, e acela\u0219i lucru aplicabil la joburi \u0219i la restul: \u201eNu ne suna\u021bi voi, v\u0103 sun\u0103m noi\u201d. Adic\u0103 am un client \u0219i un server. La programarea pe socket-uri de exemplu, c\u00e2nd un client se conecteaz\u0103, serverul \u0219tie c\u0103 acel client s-a conectat, se mai conecteaz\u0103 unul, \u0219tie. Are o list\u0103 cu clien\u021bi \u0219i \u0219tie c\u00e2nd, de exemplu c\u00e2nd un client transmite un mesaj c\u0103tre to\u021bi ceilal\u021bi s\u0103 itereze prin lista de clien\u021bi \u0219i s\u0103 transmit\u0103 mesajul fiec\u0103ruia \u00een parte. Asta se \u00eent\u00e2mpl\u0103 la programarea pe socket-uri care nu respect\u0103 acest principiu de Dependency Inversion. Pe c\u00e2nd un serviciu web REST, respect\u0103 acest principiu de Dependency Inversion. Adic\u0103, serverul nu \u0219tie de clien\u021bi, ci doar clien\u021bii \u0219tiu de server. Vede\u021bi, aceast\u0103 dependen\u021b\u0103 e inversat\u0103, clientul depinde de server, nu serverul depinde de clien\u021bi. \u0218i atunci voi parsa de exemplu unei metode ce face un GET, s\u0103 spunem, pe serverul acesta REST. Din nou, serviciile web nu sunt scopul acestui tutorial, dac\u0103 dori\u021bi mai multe detalii, v\u0103 rog s\u0103 c\u0103uta\u021bi despre servicii web \u0219i ce \u00eenseamn\u0103 servicii web REST. Spuneam c\u0103, dac\u0103 am o func\u021bie ce apeleaz\u0103 un serviciu, va trebui ca acel serviciu s\u0103 \u00eel dau oarecum ca parametru. Chiar e o idee bun\u0103 \u0219i asta se \u00eent\u00e2mpl\u0103 \u0219i \u00een AngularJS. Deci, primesc serviciul ca parametru, prelucrez, doar c\u00e2nd am nevoie de el atunci \u00eel apelez. Adic\u0103 doar c\u00e2nd clientul are nevoie de el atunci \u00eel apeleaz\u0103. Nu trebuie s\u0103 am ni\u0219te referin\u021be salvate pe server cu to\u021bi clien\u021bii, ca s\u0103 pot apela o metod\u0103, de exemplu, de pe server. La fel se \u00eent\u00e2mpla \u0219i \u00een AngularJS unde modulele principale \u00ee\u0219i anun\u021bau dependen\u021bele \u0219i atunci c\u00e2nd era nevoie, aceste dependen\u021be erau \u00eenc\u0103rcate \u00een acel modul.<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Transcriere Haide\u021bi s\u0103 continu\u0103m ce discutam \u00een episodul precedent. Single Responsability Principle &#8211; Principiul responsabilit\u0103\u021bii unice. Asta presupune ca o clas\u0103 s\u0103 aib\u0103 \u00eentotdeauna o singur\u0103 responsabilitate \u0219i numai una. Deci s\u0103 nu facem clase din acelea de tipul Utility, nu \u0219tiu ce Manager, \u00een care punem ni\u0219te metode care [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3084,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[158,172],"tags":[159,162,163,161],"class_list":["post-986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-clean-code","category-tutoriale-video","tag-clean-code","tag-cod-bine-scris","tag-cod-corect","tag-programare"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clean Code - Episodul 2 - Facem Soft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean Code - Episodul 2 - Facem Soft\" \/>\n<meta property=\"og:description\" content=\"Transcriere Haide\u021bi s\u0103 continu\u0103m ce discutam \u00een episodul precedent. Single Responsability Principle &#8211; Principiul responsabilit\u0103\u021bii unice. Asta presupune ca o clas\u0103 s\u0103 aib\u0103 \u00eentotdeauna o singur\u0103 responsabilitate \u0219i numai una. Deci s\u0103 nu facem clase din acelea de tipul Utility, nu \u0219tiu ce Manager, \u00een care punem ni\u0219te metode care [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Facem Soft\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/facemsoft\" \/>\n<meta property=\"article:published_time\" content=\"2015-03-29T19:59:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-17T14:55:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"589\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bogdan Iancu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bogdan Iancu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/\"},\"author\":{\"name\":\"Bogdan Iancu\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/person\\\/f2cca604e1acf812e3f40c8cc8a82190\"},\"headline\":\"Clean Code &#8211; Episodul 2\",\"datePublished\":\"2015-03-29T19:59:24+00:00\",\"dateModified\":\"2020-08-17T14:55:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/\"},\"wordCount\":1727,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"keywords\":[\"clean code\",\"cod bine scris\",\"cod corect\",\"programare\"],\"articleSection\":[\"Clean Code\",\"Tutoriale video\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/\",\"name\":\"Clean Code - Episodul 2 - Facem Soft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"datePublished\":\"2015-03-29T19:59:24+00:00\",\"dateModified\":\"2020-08-17T14:55:41+00:00\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"width\":\"1200\",\"height\":\"589\",\"caption\":\"Clean Code\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#website\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/\",\"name\":\"Facem Soft\",\"description\":\"Cursuri IT livrate din pasiune pentru programare\",\"publisher\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/facemsoft.ro\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\",\"name\":\"S.C. Facem Soft - Training & Consulting S.R.L.\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/logo_site_v3.png?fit=3333%2C2500&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/logo_site_v3.png?fit=3333%2C2500&ssl=1\",\"width\":3333,\"height\":2500,\"caption\":\"S.C. Facem Soft - Training & Consulting S.R.L.\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/facemsoft\",\"https:\\\/\\\/www.instagram.com\\\/bogdaniancu88\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/bogdaniancu88\\\/\",\"https:\\\/\\\/www.youtube.com\\\/FacemSoft\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/person\\\/f2cca604e1acf812e3f40c8cc8a82190\",\"name\":\"Bogdan Iancu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"contentUrl\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"caption\":\"Bogdan Iancu\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clean Code - Episodul 2 - Facem Soft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/","og_locale":"en_GB","og_type":"article","og_title":"Clean Code - Episodul 2 - Facem Soft","og_description":"Transcriere Haide\u021bi s\u0103 continu\u0103m ce discutam \u00een episodul precedent. Single Responsability Principle &#8211; Principiul responsabilit\u0103\u021bii unice. Asta presupune ca o clas\u0103 s\u0103 aib\u0103 \u00eentotdeauna o singur\u0103 responsabilitate \u0219i numai una. Deci s\u0103 nu facem clase din acelea de tipul Utility, nu \u0219tiu ce Manager, \u00een care punem ni\u0219te metode care [&hellip;]","og_url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/","og_site_name":"Facem Soft","article_publisher":"https:\/\/www.facebook.com\/facemsoft","article_published_time":"2015-03-29T19:59:24+00:00","article_modified_time":"2020-08-17T14:55:41+00:00","og_image":[{"width":1200,"height":589,"url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","type":"image\/png"}],"author":"Bogdan Iancu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bogdan Iancu","Estimated reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#article","isPartOf":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/"},"author":{"name":"Bogdan Iancu","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190"},"headline":"Clean Code &#8211; Episodul 2","datePublished":"2015-03-29T19:59:24+00:00","dateModified":"2020-08-17T14:55:41+00:00","mainEntityOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/"},"wordCount":1727,"commentCount":0,"publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","keywords":["clean code","cod bine scris","cod corect","programare"],"articleSection":["Clean Code","Tutoriale video"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/","url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/","name":"Clean Code - Episodul 2 - Facem Soft","isPartOf":{"@id":"https:\/\/facemsoft.ro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#primaryimage"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","datePublished":"2015-03-29T19:59:24+00:00","dateModified":"2020-08-17T14:55:41+00:00","inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-2\/#primaryimage","url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","contentUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","width":"1200","height":"589","caption":"Clean Code"},{"@type":"WebSite","@id":"https:\/\/facemsoft.ro\/#website","url":"https:\/\/facemsoft.ro\/","name":"Facem Soft","description":"Cursuri IT livrate din pasiune pentru programare","publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/facemsoft.ro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/facemsoft.ro\/#organization","name":"S.C. Facem Soft - Training & Consulting S.R.L.","url":"https:\/\/facemsoft.ro\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/logo_site_v3.png?fit=3333%2C2500&ssl=1","contentUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/logo_site_v3.png?fit=3333%2C2500&ssl=1","width":3333,"height":2500,"caption":"S.C. Facem Soft - Training & Consulting S.R.L."},"image":{"@id":"https:\/\/facemsoft.ro\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/facemsoft","https:\/\/www.instagram.com\/bogdaniancu88\/","https:\/\/www.linkedin.com\/in\/bogdaniancu88\/","https:\/\/www.youtube.com\/FacemSoft"]},{"@type":"Person","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190","name":"Bogdan Iancu","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","url":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","contentUrl":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","caption":"Bogdan Iancu"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p81Qbo-fU","_links":{"self":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/comments?post=986"}],"version-history":[{"count":0,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/986\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/media\/3084"}],"wp:attachment":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/media?parent=986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/categories?post=986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/tags?post=986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}