Zimanî babet

Vekirî / Girtî, li gorî rêgeza SOLID

Divê saziyên nermalavê (pol, modul, fonksiyon, hwd.) Ji bo dirêjkirinê vekirî be, lê ji bo sererastkirinê girtî ye.

Sêwirana nermalavê: modul, çîn û fonksiyonên bi vî rengî ku dema ku fonksiyonek nû hewce be, divê em koda heyî neguherînin lê li şûna wê koda nû binivîsin ku dê ji hêla koda heyî ve were bikar anîn. Dibe ku ev ecêb were, nemaze bi zimanên wekî Java, C, C ++ an C # ku ew ne tenê ji xwe re koda çavkaniyê di heman demê de ji binaryê re jî derbasdar e. Em dixwazin bi awayên ku ji nû ve belavkirina biner, darveker, an DLL-ê hewce ne hewce dike, taybetmendiyên nû çêbikin.
OCP di çarçoveya SOLID de

 

SRP û OCP-ya temamker

Me berê jî prensîba SRP ya Berpirsyariya Yekta dît ku dibêje ku pêdivî ye ku modulek tenê sedemek wê heye ku biguheze. Prensîbên OCP û SRP hevûdu ne. Koda ku li dû prensîba SRP hatî sêwirandin dê ji prensîbên OCP re jî rêzdar be. Dema ku kodek me hebe ku tenê sedemek wê heye ku biguhere, danasîna taybetmendiyek nû dê sedemek duyemîn ji bo wê guherînê biafirîne. Ji ber vê yekê dê hem SRP hem jî OCP werin binpê kirin. Bi heman awayî, heke kodek me hebe ku tenê dema ku fonksiyona wêya sereke diguhere divê were guhertin û dema ku karbidestiya nû tête zêdekirin divê bê guhertin bimîne, bi vî awayî ji OCP re rêz digire, ew ê piranî ji SRP re jî rêz bigire.
Ev nayê vê wateyê ku SRP her gav ber bi OCP an berevajî ve dibe, lê di pir rewşan de heke yek ji wan were pêşwazîkirin, gihîştina ya duyemîn pir hêsan e.

 

Mînaka binpêkirina prensîba OCP

Ji awira safî ya teknîkî, Prensîba Vebûn / Girtî pir hêsan e. Têkiliyek hêsan a di navbera du çînan de, mîna ya li jêr, bingeha OCP binpê dike.

Çîna Bikarhêner rasterast çîna Logic bikar tîne. Heke em hewce ne ku çînek Logic-a duyemîn bi rengek bicîh bikin ku bihêle em hem ya heyî û hem jî ya nû bikar bînin, pêdivî ye ku çîna Logic-a heyî were guhertin. Bikarhêner rasterast bi pêkanîna mantiqê ve girêdayî ye, ji bo me çu rê tune ku em mantiqa nû peyda bikin bêyî ku li ya heyî bandor bike. Dema ku em qala zimanên tîpîk ên statîk dikin, dibe ku çîna Bikarhêner jî hewceyê guherînan be. Ger em li ser zimanên berhevkirî biaxifin, bê guman dê hem Pêkanîna Bikarhêner û Mêjûya cîbicîkar an pirtûkxaneya dînamîk ji nû ve berhevkirin û radestkirinê hewce bike, çêtir e ku dema ku gengaz be jê dûr bikevin.

Bi referansa li nexşeya berê, em dikarin derxin holê ku her çînek ku rasterast çînek din bikar bîne, dikare bibe sedema binpêkirina prensîba Vekirî / Girtî. 
Em bihesibînin ku em dixwazin bi navgîniya serîlêdana xwe polek binivîsin ku bikaribe "di sedî" de pelê dakêşandî, pêşkeftinê peyda bike. Dê du dersên meyên sereke hebin, Pêşkeftinek û Pel, û ez dibêm qey em dixwazin wana wiha bikar bînin:

 

testItCanGetTheProgressOfAFileAsAPercent fonksiyonê () {
     $ pel = Pelê nû ();
     $ pel-> dirêjahî = 200;
     $ pel-> şandin = 100;
     $ pêşveçûn = Pêşkeftina nû ($ pel);
     $ this-> assertEquals (50, $ progress-> getAsPercent ());
}

Di vê kodê de em bikarhênerên Pêşverû ne. Em dixwazin, ji mezinahiya pelê ya rastîn, bêyî nirxek wekî rêjeyek bistînin. Em Pelê wekî çavkaniya agahdariyê bikar tînin. Dosyayek di bajaran de dirêjahiyek heye û qada ku jê re şandî tê gotin ku mîqdara daneyên ji dakêşanê re hatî şandin temsîl dike. Em ne girîng in ku van nirxan di serîlêdanê de çawa têne nûve kirin. Em dikarin texmîn bikin ku hin mantiqê efsûnî heye ku vê yekê ji bo me dike, ji ber vê yekê di testê de em dikarin wan bi zelalî saz bikin.

 

pola Pel {
     dirêjahiya $ giştî;
     gel $ şandin;
}

 

Çîna Pelê tenê tiştek daneya hêsan e ku du zeviyan tê de ye. Bê guman divê ew agahdarî û tevgerên din jî, wekî navê pelê, rê, rêça têkildar, peldanka heyî, celeb, destûr û hwd.

 

pêşveçûna pola {

     $ pelê taybet;

     fonksiyona __construction (Pel $ pel) {
          $ ev-> pel = $ pel;
     }

     fonksiyona getAsPercent () {
          vegerin $ ev-> pel-> şandî * 100 / $ ev-> pel-> dirêjahî;
     }

}

Pêşkeftin bi tenê sinifek e ku pelek di çêkerê xwe de pelek qebûl dike. Ji bo zelaliyê, me di pîvanên çêker de celeb guherbar diyar kir. Li ser Pêşkeftin, getAsPercent () yek rêbazek kêrhatî heye, ku dê nirx û dirêjahiya şandî ji Pelê bistîne û wan vegerîne ji sedî. Sade û ew dixebite.

Ev kod rast xuya dike, lêbelê ew prensîba Vekirî / Girtî binpê dike.

Lê çima?

How çawa?

 

Bila hewl bidin ku hewcedariyan biguherînin

Her serlêdanek ku bi demê re pêş bikeve dê hewceyê taybetmendiyên nû be. Taybetmendiyek nû ji bo serîlêdana me dikare ew be ku bila bila muzîk li şûna tenê pelan dakêşîne, streaming bike. Dirêjahiya pelê di byteyan de, domdariya muzîkê di çirkeyan de tê nimandin. Em dixwazin barên pêşveçûnê pêşkêşî guhdarên xwe bikin, lê ma em dikarin pola ku li jor hatî nivîsandin ji nû ve bikar bînin?

Na em nekarin. Pêşkeftina me girêdayî Pelê ye. Ew tenê dikare agahdariya pelê birêve bibe, her çend ew dikare li ser naveroka muzîkê jî were sepandin. Lê ji bo vê yekê divê em wê biguherînin, divê em Pêşkeftinê bi muzîk û pelan zanibin. Ger sêwirana me bi OCP-ê re lihevhatî bûya, ne hewce bû ku em Destê Pelê an Pêşkeftinê bigirin. Em dikarin tenê pêşveçûna heyî ji nû ve bikar bînin û wê li ser muzîkê bi kar bînin.

 

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Çareseriya gengaz

Zimanên bi tîpên dînamîkî xwedî avantaj in ku di dema xebitandinê de cureyên tiştan birêve dibin. Ev dihêle ku em tîpnivîsê ji avakerê Pêşverû rakin û kod dê bixebite.

pêşveçûna pola {

     $ pelê taybet;

     fonksiyona __construction ($ pel) {
         $ ev-> pel = $ pel;
     }

    fonksiyona getAsPercent () {
         vegerin $ ev-> pel-> şandî * 100 / $ ev-> pel-> dirêjahî;
     }

}

Nowdî em dikarin her tiştî li Pêşkeftinê bidin destpê kirin. By bi tiştek, ez wateya her tiştî dibêjim:

pola Muzîkê {

dirêjahiya $ giştî;
gel $ şandin;

gel $ artist;
album $ giştî;
gel $ releaseDate;

fonksiyona getAlbumCoverFile () {
vegerîne 'Wêne / Veşartin /'. $ ev-> hunermend. '/'. $ ev-> album. '.png';
}
}

Dersa Muzîkê mîna ya li jor dê bêkêmasî bixebite. Em dikarin bi ceribandinek pir dişibe Pelê bi hêsanî wê biceribînin.
function testItCanGetTheProgressOfAMusicStreamAsAPercent () {
$ muzîk = Muzîka nû ();
$ muzîk-> dirêj = 200;
$ muzîk-> şandin = 100;

$ pêşveçûn = Pêşkeftina nû ($ muzîk);

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

Ji ber vê yekê di bingeh de her naverokek pîvandbar dikare bi polê Pêşkeftinê re were bikar anîn. Dibe ku divê em wê bi kodê vebêjin û navê guhêrbar jî biguherînin:

pêşveçûna pola {

$ meblengê mîhengbar $;

fonksiyona __construction ($ mîqdara naverok) {
$ ev-> pîvanbarContent = $ pîvanbarContent;
}

fonksiyona getAsPercent () {
vegerin $ ev-> pîvana-pîvandin-> şandî * 100 / $ ev-> pîvana-pîvan-> dirêjî;
}

}

Dema ku me Pelê wekî tîp diyar kir, em xweşbîn bûn ku çîna me dikare çi bigire dest. Ew eşkere bû û heke tiştek din were, xeletiyek mezin dê ji me re vebêje.

Una pola ku rêbaza çînek bingehîn ji holê radike da ku peymana çîna bingehîn ji hêla çîna jêgirtî ve neyê birûmet kirin. 

Em naxwazin dawî li hewildana gazîkirina rêbazan an qadên gihiştinê yên li ser tiştên ku ne li gorî peymana me ne naxwazin. Dema ku tîpek me hebû, peyman bi wê hate diyar kirin. Zevî û rêbazên dersa Pelê. Naha ku tiştek me tune, em dikarin her tiştî bişînin, tewra jî û ew ê bibe sedema xeletiyek xerab.

Digel ku encama dawiyê di her du rewşan de yek e, tê vê wateyê ku kod têk diçe, ya berê peyamek xweş çêkir. Lêbelê, ev pir tarî ye. Rê tune ku meriv zanibe guhêrbar çi ye – di doza me de rêzek – û li kîjan taybetmendiyan hatine gerandin û nehatine dîtin. Debugkirin û rastkirina pirsgirêkê dijwar e. Divê bernamesaz dersa Pêşketinê veke, bixwîne û jê fam bike. Peyman, di vê rewşê de, dema ku hûn bi eşkere tîpê diyar nakin, ev e defibi reftarên Pêşketinê ve naliya. Ew peymanek têgihîştî ye ku tenê ji Pêşverû re tê zanîn. Di nimûneya me de, ew e defibi gihandina du qadan, şandî û dirêjî, di rêbaza getAsPercent() de tê derxistin. Di jiyana rast de peymana têgihîştî dikare pir tevlihev û dijwar be ku meriv tenê çend saniyeyan di polê de bibîne.

Ev çareserî tenê tête pêşniyar kirin heke yek ji serişteyên din ên jêrîn bi hêsanî neyên pêkanîn an jî heke ew ê guherînên mîmarî yên cidî bine ku hewildanê nadin.

Ercole Palmeri

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Gotarên dawî

Veeam ji parastinê bigire heya bersiv û başbûnê ji bo ransomware piştgirîya herî berfireh vedihewîne

Coveware ji hêla Veeam ve dê berdewam bike ku karûbarên bersivdayina bûyera xerckirina sîber peyda bike. Coveware dê kapasîteyên dadwerî û sererastkirinê pêşkêşî bike…

23 Nîsana 2024

Şoreşa Kesk û Dîjîtal: Ma Maintenance Pêşbînîdar Pîşesaziya Neft û Gazê Veguherîne Çawa

Lênêrîna pêşbînîkirî di sektora neft û gazê de, bi nêzîkatiyek nûjen û çalak a rêveberiya nebatê şoreşek dike.…

22 Nîsana 2024

Rêkûpêk antîtrust a Keyaniya Yekbûyî alarma BigTech li ser GenAI radike

CMA ya Keyaniya Yekbûyî di derbarê reftarên Big Tech de di bazara îstîxbarata çêkirî de hişyariyek derxist. Va…

18 Nîsana 2024

Casa Green: şoreşa enerjiyê ji bo pêşerojek domdar li Italytalyayê

Biryarnameya "Xalên Kesk", ku ji hêla Yekîtiya Ewropî ve ji bo zêdekirina karbidestiya enerjiyê ya avahiyan hatî damezrandin, pêvajoya xwe ya qanûnî bi…

18 Nîsana 2024