tutorial

SOLID 5 prensîbên bernamekirina object-oriented çi ne

SOLID kurtayiyek e, ku behsa pênc prensîbên sêwirana object-oriented (OOD an OOP) dike. Van rêgezên ku pêşdebir dikarin bikar bînin da ku nermalav biafirînin ku birêve birin, parastin û dirêjkirin. Famkirina van têgehan dê we pêşvebirrek çêtir çêbike û alîkariya we bike ku hûn ji pirsgirêkên rêveberiya nermalavê dûr bisekinin. Wateya wê çi ye ku meriv bernamenûsek baş e?

Kesê ku di bernameya nermalavê de xwedan hin ezmûn be, kodê nermalavê ku ji hêla kesên din ve hatî nivîsandin dadrês dike, û li gorî rêça karîyera xwe ve parametreyên darizandinê bikar tîne.

Di kariyera xweya pîşeyî de, min gelek pêşdebir nas kir, û min bi hezaran rêzikên kodê dît û dema ku ez hewce bikim ku jêhatîbûna pêşdebirvanek binirxînim ez bi giranî li du faktoran dinêrim:

  • Di xwendina kodê de sadebûn;
  • Çiqas îhtîmal heye ku koda wan bi demê re bixebite û pêşve biçe.

Bi kêfxweşî, hin bingehîn an prensîb hene ku hêsan dikin ku di kodkirinê de çêtir be.

kurteya SOLID tê vê wateyê:
S: prensîba berpirsiyariya yekta
O: prensîba vekirî-girtî
L: Prensîba şûna Liskov
I: Prensîpa dabeşkirina navrûyê
D: Prensîba Vegerîna Baweriyan

Werin em bi kûrkirina prensîba SOLID a yekem, ango ya

Prensîba Berpirsyariya Yekane

Divê çînek (an modûlek) tenê sedemek wê hebe ku biguhere, pêşve biçe.

Têgeh bixwe pir hêsan e, lê ji bo gihîştina vê hêsaniyê riya pêkanînê dikare pir tevlihev be. Divê çînek tenê sedemek wê hebe ku biguheze.

Lê çima? 

Çima ew qas girîng e ku tenê sedemek guhertinê hebe?

Mînakî, heke du sedemên cûda yên guherînê hebin, ew tê fikirîn ku du tîmên cûda dikarin ji ber du sedemên cûda li ser heman kodê bixebitin. Pêdivî ye ku her kes çareseriya xwe bicîh bîne, ku di rewşa zimanek berhevkirî de (wekî C ++, C # an Java), dikare bibe sedema modulên ku bi tîmên din an beşên din ên serîlêdanê re lihevnekirin.

Mînakek din, heke hûn zimanek şîrovekirî bikar tînin, dibe ku hûn ji ber sedemên cûda neçar bimînin ku heman pola an modulê ji nû ve biceribînin. Ev tê wateya kar, dem û hewldana bêtir ji bo kontrolkirina kalîteyê.

Naskirina taybetmendiya yeka ku divê çînek an modûlek hebe, ji lêgerîna li lîsteya kontrolê ya ku testan dimeşîne pir tevlihevtir e. 

Lê ka em ji nêrînek kêmtir teknîkî bifikirin, ango em hewl bidin ku bikarhênerê çîna an modula xwe, ya ku dê wê bikar bîne, analîz bikin. Aliyek bingehîn ku divê em hertim di hişê xwe de bigirin, ev e ku bikarhênerên serîlêdanê an pergala ku em pêşve dibin ên ku ji hêla modulek taybetî ve têne xizmet kirin dê yên ku guhertinên wê daxwaz dikin. Yên servekirî dê bixwazin ku pol an modulê biguherînin. 

Hin nimûneyên modûlan û karanîna wan:

  • Modûla parastinê: bikarhêner ji rêvebirên danegeh û avakarên nermalavê pêk tê.
  • Modula raporkirinê: bikarhêner ji karmendên ofîsê, hesabvan û hilberînê pêk tê.
  • Ji bo pergala rêveberiya meaşê modula hesabkirina drav: Bikarhêner dikarin parêzer, rêvebir û hesabvan jî tê de bin.
  • Ji bo pergala rêveberiya pirtûkxaneyê modûla lêgerîna nivîsê: bikarhêner dikarin ji hêla pirtûkxanê ve an ji hêla mêvan û xerîdarên pirtûkxaneyê bixwe ve werin nimînandin.

Ji ber vê yekê heke gava yekem lêgerîna lîstikvanan an lîstikvanê ku bi modulê re rola muxatabê heye, hevgirtina kesan bi hemî rolan re dijwar be. Di pargîdaniyek piçûk de, yek kes dikare gelek rol bilîze dema ku di pargîdaniyek mezin de dikare gelek kes hebin ku xwedan yek rol in. 

Ew ji bilî mirovan an bikarhêneran naskirina rolan, maqûltir xuya dike.

Ji ber vê yekê:

  • bikarhênerê pergala nermalavê defisedemên guherînê diyar dike;
  • berpirsiyarî malbatek fonksiyonan e ku hewcedariyên lîstikvanek taybetî, ango, bikarhênerê pergalê têr dike;
  • lîstikvan, bikarhêner ji bo malbata fonksiyonên ku divê hewcedariya bikarhêner têr bikin dibe çavkaniyek guherînê;
  • pêşkeftina hewcedariyên bikarhêner, rêberiya pêşveçûna karbidestiyê dike;

Ka em çend mînakan bibînin

Bifikirin ku dersek me ya Pirtûkê heye ku têgîna pirtûkê û karbidestiya wê vedigire.

pola Pirtûk {

    fonksiyona getTitle () {

        vegerin "Pirtûkek Mezin";

    }

    fonksiyona getAuthor () {

        vegerin "Alessandro Baricco";

    }

    function nextpage () {

        // rûpela din

    }

    fonksiyona çapê Rûpelê Agahdarî () {

        echo "naveroka rûpelê niha";

    }

}

Ev çînek pir normal e. Pirtûkek me heye, û pol dikare sernavê me bide, ew dikarin nivîskarê me bidin, û ew dikarin pêşve biçin. Di dawiyê de, ew di heman demê de dikare çap bike ku rûpelê heyî li ser dîmenderê çap bike. 

Lêbelê, pirsgirêkek piçûk heye. 

Li ser aktorên ku di birêvebirina tiştê Pirtûkê de têkildar difikirin, ew kî ne? 

Em dikarin li vir bi hêsanî du aktorên cûda bifikirin: Birêvebirina pirtûkê (wek ku pirtûkxane) e Mekanîzmaya radestkirina daneyê (mîna çawa em dixwazin naverokê radestî bikarhêner bikin: li ser-ekran, navrûya bikarhênerê ya grafîkî, navnîşa bikarhêner-tenê-nivîs, dibe ku çap bike). 

Ji ber vê yekê du aktorên me yên cihêreng ên ku bi polê re têkilî danîne hene.

Bi kurtahî ev çîn di navbera:

  • mantiqa karsaziyê bi 
  • pêşkêşî 

ev dikare bibe pirsgirêkek ji ber ku ew prensîba berpirsiyariya yekane (SRP) binpê dike. 

Em çawa dikarin biguherin, em çawa dikarin vê kodê baştir bikin da ku rêzê li prensîba berpirsiyariya yekta bigirin?

Li koda jêrîn binêrin:

pola Pirtûk {

    fonksiyona getTitle () {

        vegerin "Oceano Mare";

    }

    fonksiyona getAuthor () {

        vegerin "Alessandro Baricco";

    }

    rûpelê fonksiyonê () {

        // rûpela din

    }

    fonksiyona getCurrentPage () {

        echo "naveroka rûpelê niha";

    }

}

Printer interface

    rûpelê fonksiyonê ($ rûpel);

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ê.

}

pola StampaLibro Çapxaneyê bicîh tîne {

    Rûpelên fonksiyonê ($ rûpel) {

        echo $ rûpel;

    }

}

 

class HtmlPrinter Çapxaneyê bicîh dike {

    Rûpelên fonksiyonê ($ rûpel) {

        echo ' ' rûpel $. ' ';

    }

}

Vê nimûneya pir hêsan nîşan dide ka meriv çawa pêşkêşî ji mantiqa karsaziyê veqetîne, û li gorî SRP ew di nermbûna projeya me de avantajên mezin pêşkêşî dike.

Ka em li mînakek din binêrin:

Mînakek mîna ya li jor dema ku tiştek dikare xwe ji danasînê xilas bike û bistîne ye.

pola Pirtûk {

    fonksiyona getTitle () {

        vegerin "Oceano Mare";

    }

    fonksiyona getAuthor () {

        vegerin "Alessandro Baricco";

    }

    rûpelê fonksiyonê () {

        // rûpela din

    }

    fonksiyona getCurrentPage () {

        vegerin "naveroka rûpelê niha";

    }

    fonksiyonê xilas bike () {

        $ filename = '/ belge /'. $ ev-> getTitolo (). '-'. $ ev-> getAuthor ();

        file_put_contents ($ filename, serialize ($ ev));

    }

}

Mîna berê, li vir jî em dikarin aktorên cihêreng ên wekî nas bikin Birêvebirina pirtûkê (wek ku pirtûkxane) e Li sersekinî. Kengê ku em bixwazin awayê ku em ji rûpelê diçin rûpelê biguherînin, pêdivî ye ku em vê polê biguherînin. Em dikarin çend sedemên guherînê hebin.

pola Pirtûk {

    fonksiyona getTitle () {

        vegerin "Oceano Mare";

    }

    fonksiyona getAuthor () {

        vegerin "Alessandro Baricco";

    }

    rûpelê fonksiyonê () {

        // rûpela din

    }

    fonksiyona getCurrentPage () {

        vegerin "naveroka rûpelê niha";

    }

}

pola SimpleFilePersistence {

    fonksiyona xilas bike (Pirtûka $ pirtûkê) {

        $ filename = '/ belge /'. $ pirtûk-> getTitle (). '-'. $ pirtûk-> getAuthor ();

        file_put_contents ($ filename, serialize ($ book));

    }

}

Operasyona mayîndebûnê ber bi çînek din ve dê bi zelalî berpirsiyariyan ji hev veqetîne û em ê azad bin ku bêyî bandor li pola Pirtûka xwe rêbazên domdariyê li hevûdu bikin. Mînakî, bicîhkirina dersek DatabasePersistence dê bibandor be, û mantiqa karsaziya me ya ku li dora karûbarên pirtûkê hatî ava kirin naguhere.

Bi xwendina prensîba duyemîn Vekirî / Girtî -> bidomînin

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î

Idea Brilliant: Bandalux Airpure®, perdeya ku hewayê paqij dike, pêşkêşî dike

Encama nûjeniya teknolojîk a domdar û pabendbûna bi jîngehê û xweşbûna mirovan. Bandalux Airpure®, konek pêşkêşî dike…

12 Nîsana 2024

Sêwiranên sêwiranê Vs prensîbên SOLID, awantaj û dezawantajên

Nimûneyên sêwiranê ji bo pirsgirêkên dubare yên di sêwirana nermalavê de çareseriyên nizm ên taybetî ne. Nimûneyên sêwiranê…

11 Nîsana 2024

Magica, sepana iOS-ê ku jiyana ajokaran di rêvebirina wesayîta wan de hêsan dike

Magica serîlêdana iPhone-ê ye ku rêveberiya wesayîtê hêsan û bikêr dike, ji ajokaran re dibe alîkar ku xilas bikin û…

11 Nîsana 2024

Nexşeyên Excel, ew çi ne, meriv çawa nexşeyek biafirîne û meriv çawa nexşeya çêtirîn hilbijêrin

Nexşeya Excel dîmenek e ku daneyên di pelgeya xebatê ya Excel de nîşan dide.…

9 Nîsana 2024