Izihloko

Kuvuliwe / Kuvaliwe, ngokuya ngomgomo we-SOLID

Izinhlangano zeSoftware (amakilasi, amamojula, imisebenzi, njll.) Kufanele zivulekele ukunwetshwa, kepha zivaliwe ukuhlelwa.

Ukwakha isoftware: amamojula, amakilasi nemisebenzi ngendlela yokuthi lapho kudingeka ukusebenza okusha, akufanele siguqule ikhodi esivele ikhona kepha kunalokho sibhale ikhodi entsha ezosetshenziswa yikhodi ekhona. Lokhu kungabonakala kungajwayelekile, ikakhulukazi ngezilimi ezinjengeJava, C, C ++ noma i-C # lapho kungasebenzi khona kuphela kukhodi yomthombo uqobo kodwa naku-kanambambili. Sifuna ukudala izici ezintsha ngezindlela ezingadingi ukwabiwa kabusha kwama-binaries akhona, ama-executable, noma ama-DLL.
I-OCP kumongo we-SOLID

 

I-SRP ehambisanayo ne-OCP

Sesivele siwubonile umgomo we-SRP Womthwalo Obodwa othi imodyuli kufanele ibe nesizathu esisodwa kuphela sokushintsha. Izimiso ze-OCP ne-SRP ziyahambisana. Ikhodi eyakhiwe ngokulandela umgomo we-SRP nayo izohlonipha imigomo ye-OCP. Lapho sinekhodi enesizathu esisodwa kuphela sokushintsha, ukwethula isici esisha kuzodala isizathu sesibili salolo shintsho. Ngakho-ke bobabili i-SRP ne-OCP bazophulwa. Ngokunjalo, uma sinekhodi okufanele iguquke kuphela lapho umsebenzi wayo oyinhloko ushintsha futhi kufanele ihlale ingashintshiwe lapho ukusebenza okusha kungezwa, ngaleyo ndlela kuhlonishwe i-OCP, izohlonipha kakhulu i-SRP.
Lokhu akusho ukuthi i-SRP iholela njalo ku-OCP noma okuphambene nalokho, kepha ezimweni eziningi uma omunye wabo enamathelwa, ukuthola okwesibili kulula.

 

Isibonelo sokwephula umthetho we-OCP

Ngokombono wobuchwepheshe kuphela, i-Open / Closed Principle ilula kakhulu. Ubudlelwano obulula phakathi kwamakilasi amabili, njengalena engezansi, kwephula umthetho we-OCP.

Isigaba Somsebenzisi sisebenzisa isigaba se-Logic ngqo. Uma sidinga ukusebenzisa ikilasi lesibili le-Logic ngendlela esivumela ukuthi sisebenzise zombili ezamanje nezintsha, isigaba se-Logic esikhona sizodinga ukuguqulwa. Umsebenzisi uboshelwe ngqo ekusebenzeni komqondo, ayikho indlela yokuthi sinikeze umqondo omusha ngaphandle kokuthinta owamanje. Futhi uma sikhuluma ngezilimi ezifakwe ngokwezibalo, isigaba soMsebenzisi kungenzeka ukuthi sidinge ukulungiswa futhi. Uma sikhuluma ngezilimi ezihlanganisiwe, ngokuqinisekile uMsebenzisi osebenzisekayo kanye neLogic ephathekayo noma umtapo wezincwadi onamandla uzodinga ukuphindiselwa nokulethwa, okungcono ukugwema lapho kungenzeka.

Ngokubhekisele kusikimu esedlule, singaphetha ngokuthi noma yiliphi ikilasi elisebenzisa ngokuqondile elinye ikilasi, lingaholela ekuphulweni komgomo ovulekile / ovaliwe. 
Ake sithi sifuna ukubhala ikilasi elikwazi ukunikeza inqubekela phambili "ngamaphesenti" wefayela elilandiwe, ngohlelo lwethu lokusebenza. Sizoba nezigaba ezimbili eziyinhloko, iNqubekela phambili neFayela, futhi ngicabanga ukuthi singathanda ukuzisebenzisa ngale ndlela elandelayo:

 

umsebenzi testItCanGetTheProgressOfAFileAsAPercent () {
     $ file = Ifayela elisha ();
     $ file-> ubude = 200;
     $ file-> ithunyelwe = 100;
     $ progress = Inqubekela phambili entsha ($ file);
     $ this-> assertEquals (50, $ progress-> getAsPercent ());
}

Kule khodi singabasebenzisi beNqubekela phambili. Sifuna ukuthola inani njengephesenti, kungakhathalekile ukuthi ungakanani usayizi wefayela uqobo. Sisebenzisa iFayela njengomthombo wolwazi. Ifayela linobude bama-byte nenkambu ebizwa ngokuthi kuthunyelwe emele inani ledatha ethunyelwe kumlandi. Asikhathali ukuthi lawa manani abuyekezwa kanjani kuhlelo lokusebenza. Singacabanga ukuthi kunomqondo othile womlingo osenzela lokhu, ngakho esivivinyweni singazibeka ngokusobala.

 

Ifayela lesigaba {
     ubude bomphakathi obungu- $;
     $ public ithunyelwe;
}

 

Isigaba sefayela siyinto elula yedatha equkethe lezi zinkambu ezimbili. Vele kufanele futhi iqukathe olunye ulwazi nokuziphatha, njengegama lefayela, indlela, indlela yesihlobo, umkhombandlela wamanje, uhlobo, izimvume, njalonjalo.

 

Inqubekela phambili yeklasi {

     ifayela eliyimfihlo le- $;

     umsebenzi __construct (Ifayela $ file) {
          $ this-> file = $ file;
     }

     umsebenzi getAsPercent () {
          buyisela i- $ this-> file-> sent * 100 / $ this-> file-> length;
     }

}

Inqubekela phambili iyisigaba esamukela ifayili kumakhi waso. Ukucacelwa, sichaze uhlobo oluguquguqukayo kumapharamitha womakhi. Kunendlela eyodwa ewusizo ku-Progress, getAsPercent (), ezothatha amanani nobude obuthunyelwe kusuka kufayela bese ubenza iphesenti. Ilula futhi iyasebenza.

Le khodi ibonakala ilungile, kepha yephula umthetho we-Open / Closed.

Kodwa kungani?

Futhi kanjani?

 

Ake sizame ukuguqula izidingo

Uhlelo ngalunye lokuguquka ngokuhamba kwesikhathi luzodinga izici ezintsha. Isici esisha sesicelo sethu kungaba ukuvumela ukusakazwa komculo esikhundleni sokulanda amafayela kuphela. Ubude befayela lumelwe ngama-byte, ubude bomculo ngemizuzwana. Sifuna ukunikeza umugqa wenqubekela phambili kubalaleli bethu, kepha singakwazi ukusebenzisa ikilasi elibhalwe ngenhla?

Cha asikwazi. Ukuqhubekela kwethu phambili kuzofakwa kuFayela. Ingaphatha imininingwane yamafayela kuphela, noma ingasetshenziswa nokuqukethwe komculo. Kepha ukwenza lokho kufanele sikuguqule, kufanele senze Intuthuko iwazi umculo namafayela. Uma ukwakheka kwethu kuthobela i-OCP, ngeke sidinge ukuthinta Ifayela noma Ukuthuthuka. Singavele sisebenzise inqubekelaphambili ekhona bese siyisebenzisa emculweni.

 

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Isixazululo esingaba khona

Izilimi ezithayiphwe ngokunamandla zinethuba lokuphatha izinhlobo zezinto ngesikhathi sokusebenza. Lokhu kusivumela ukuthi sisuse i-typehint kumakhi we-Progress futhi ikhodi izoqhubeka nokusebenza.

Inqubekela phambili yeklasi {

     ifayela eliyimfihlo le- $;

     umsebenzi __construct ($ file) {
         $ this-> file = $ file;
     }

    umsebenzi getAsPercent () {
         buyisela i- $ this-> file-> sent * 100 / $ this-> file-> length;
     }

}

Manje sesingenza noma yini ku-Progress. Futhi nganoma yini, ngiqonde noma yini ngokoqobo:

Umculo weklasi {

ubude bomphakathi obungu- $;
$ public ithunyelwe;

umculi $ yomphakathi;
i-albhamu yomphakathi;
ukukhishwa $ publicDate;

umsebenzi getAlbumCoverFile () {
buyisela 'Izithombe / Amakhava /'. $ this-> umculi. '/'. $ this-> i-albhamu. '.png';
}
}

Futhi isigaba Somculo esifana nale esingenhla sizosebenza kahle. Singayihlola kalula ngokuhlolwa okufana kakhulu neFayela.
umsebenzi testItCanGetTheProgressOfAMusicStreamAsAPercent () {
$ music = Umculo omusha ();
$ music-> ubude = 200;
$ music-> ithunyelwe = 100;

$ progress = Intuthuko entsha ($ music);

$ this-> assertEquals (50, $ progress-> getAsPercent ());
}

Ngakho-ke ngokuqukethwe okulinganisekayo kungasetshenziswa nesigaba se-Progress. Mhlawumbe kufanele siyiveze ngekhodi ngokushintsha igama eliguqukayo:

Inqubekela phambili yeklasi {

okuyimfihlo $ kulinganiswaContent;

umsebenzi __construct ($asureableContent) {
$ this-> measureableContent = $ elinganiswa iContent;
}

umsebenzi getAsPercent () {
buyisela i- $ this-> measureableContent-> sent * 100 / $ this- >asureableContent-> length;
}

}

Lapho sichaza Ifayela njenge-typehint, besinethemba lokuthi ikilasi lethu lingaphatha ini. Kwakucacisa futhi uma kukhona okunye okuzayo, iphutha elikhulu lalizositshela.

Una Isigaba esidlula indlela yesigaba sesisekelo ukuze inkontileka yesigaba sesisekelo ingahlonishwa isigaba esenziwe. 

Asifuni ukugcina sizama ukubiza izindlela noma ukufinyelela izinkambu ezintweni ezingahambisani nesivumelwano sethu. Lapho sine-typehint, inkontileka yacaciswa yiyo. Izinkambu nezindlela zesigaba sefayela. Manje njengoba singenalutho, sesingathumela noma yini, ngisho nentambo futhi kungahle kube nephutha elibi.

Nakuba umphumela ufana kuzo zombili izimo, okusho ukuthi ikhodi iyanqamuka, eyokuqala ikhiqize umlayezo omuhle. Lokhu, nokho, kumnyama kakhulu. Ayikho indlela yokwazi ukuthi yini okuguquguqukayo - intambo kithi - nokuthi yiziphi izakhiwo ezifuniwe kodwa zangatholakala. Kunzima ukulungisa iphutha nokulungisa inkinga. Umdidiyeli wohlelo kufanele avule ikilasi Lokuthuthuka, alifunde futhi aliqonde. Inkontileka, kuleli cala, uma ungacacisi ngokucacile uhlobo lomshini, i defikuqedwe ukuziphatha kweNtuthuko. Kuyinkontileka eshiwo eyaziwa ngokuthi i-Progress kuphela. Esibonelweni sethu, kunjalo defiiqedwe ngokufinyelela izinkambu ezimbili, ezithunyelwe nobude, ngendlela ye-getAsPercent(). Empilweni yangempela inkontileka eshiwo ingaba yinkimbinkimbi kakhulu futhi kube nzima ukuyithola ngokubheka imizuzwana embalwa ekilasini.

Lesi sixazululo sinconywa kuphela uma kungekho ezinye izeluleko ezingezansi ezingasetshenziswa kalula noma uma kungadala izinguquko ezinkulu zokwakha ezingaqinisekisi umzamo.

Ercole Palmeri

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Izihloko zakamuva

Ukungenelela okusha ku-Augmented Reality, ngesibukeli se-Apple e-Catania Polyclinic

Ukuhlinzwa kwe-ophthalmoplasty kusetshenziswa isibukeli sezentengiso se-Apple Vision Pro kwenziwa eCatania Polyclinic…

3 May 2024

Izinzuzo Zokufaka Umbala Amakhasi Ezingane - umhlaba womlingo wayo yonke iminyaka

Ukuthuthukisa amakhono amahle emisipha ngokusebenzisa imibala kulungiselela izingane amakhono ayinkimbinkimbi njengokubhala. Ukufaka umbala...

2 May 2024

Ikusasa Lilapha: Imboni Yezokuthumela Imikhumbi Iwuguqula Kanjani Umnotho Womhlaba

Umkhakha wezempi wasolwandle ungamandla ezomnotho weqiniso emhlabeni jikelele, osudlule wafinyelela emakethe yezigidigidi eziyi-150...

1 May 2024

Abashicileli kanye nezivumelwano ze-OpenAI zisayina ukuze zilawule ukuhamba kolwazi olucutshungulwa yi-Artificial Intelligence

NgoMsombuluko odlule, i-Financial Times imemezele isivumelwano ne-OpenAI. I-FT inikeza amalayisense ubuntatheli bayo obusezingeni lomhlaba…

30 April 2024