MANGO ni nini kanuni 5 za programu inayolenga vitu

Takwimu thabiti za kijiometri
Mafunzo ya
1

MANGO ni kifupi, ikimaanisha kanuni tano za muundo wa vitu (OOD au OOP). Hizi ni miongozo ambayo watengenezaji wanaweza kutumia kuunda programu ambayo ni rahisi kusimamia, kudumisha na kupanua. Kuelewa dhana hizi kukufanya uwe msanidi programu bora na kukusaidia epuka shida za usimamizi wa programu Inamaanisha nini kuwa programu nzuri?

Mtu yeyote aliye na uzoefu katika programu ya majaji anahukumu nambari ya programu iliyoandikwa na wengine, kwa kutumia vigezo vya hukumu kulingana na njia yao ya kazi.

Katika kipindi cha taaluma yangu ya kitaaluma, nimewajua watengenezaji wengi, na nimeona maelfu ya mistari ya nambari na wakati ninahitaji kutathmini ustadi wa msanidi programu mimi huangalia mambo mawili:

  • Unyenyekevu katika kusoma nambari;
  • Je! Nambari yao inaweza kufanya kazi na kubadilika kwa muda.

Kwa bahati nzuri, kuna misingi au kanuni ambazo hufanya iwe rahisi kuwa bora katika kuweka alama.

kifupi SOLID inasimama:
S: kanuni ya jukumu moja
O: kanuni iliyofungwa wazi
L: Kanuni ya badala ya Liskov
I: Kanuni ya utengano wa kiolesura
D: Kanuni ya Ubadilishaji wa Utegemezi

Wacha tuanze kwa kutafakari kanuni ya MANGO ya kwanza, ambayo ni

Kanuni ya Uwajibikaji Moja

Darasa (au moduli) inapaswa kuwa na sababu moja tu ya kubadilika, kubadilika.

Dhana yenyewe ni rahisi sana, lakini kufikia unyenyekevu huu njia ya utekelezaji inaweza kuwa ngumu sana. Darasa linapaswa kuwa na sababu moja tu ya kubadilika.

Lakini kwanini? 

Kwa nini ni muhimu sana kuwa na sababu moja tu ya kubadilika?

Kwa mfano, ikiwa kuna sababu mbili tofauti za kubadilika, inawezekana kwamba timu mbili tofauti zinaweza kufanya kazi kwa nambari moja kwa sababu mbili tofauti. Kila mmoja atalazimika kutekeleza suluhisho lake mwenyewe, ambalo kwa hali ya lugha iliyokusanywa (kama C ++, C # au Java), inaweza kusababisha moduli ambazo haziendani na timu zingine au sehemu zingine za programu.

Mfano mwingine, ikiwa unatumia lugha iliyotafsirika, italazimika kujaribu tena darasa moja au moduli kwa sababu tofauti. Hii inamaanisha kazi zaidi, wakati na juhudi za kudhibiti ubora.

Kutambua kipengee kimoja darasa au moduli inapaswa kuwa ngumu zaidi kuliko kutazama tu orodha ya kufanya majaribio. 

Lakini wacha tujaribu kufikiria kutoka kwa maoni ya chini ya kiufundi, ambayo ni, wacha tujaribu kuchambua mtumiaji wa darasa letu au moduli, ndiye atakayetumia. Jambo la msingi ambalo tunapaswa kukumbuka kila wakati, ni ukweli kwamba watumiaji wa programu au mfumo tunaoendeleza ambao hutumika na moduli fulani ndio wataomba marekebisho yake. Wale waliohudumiwa watauliza kubadilisha darasa au moduli. 

Mifano kadhaa ya moduli na matumizi yake:

  • Moduli ya matengenezo: mtumiaji anaundwa na wasimamizi wa hifadhidata na wasanifu wa programu.
  • Moduli ya kuripoti: mtumiaji ana wafanyikazi wa ofisi, wahasibu na uzalishaji.
  • Moduli ya hesabu ya malipo kwa mfumo wa usimamizi wa mishahara: watumiaji wanaweza kujumuisha mawakili, mameneja na wahasibu.
  • Nakala ya utafutaji wa maandishi ya mfumo wa usimamizi wa maktaba: watumiaji wanaweza kuwakilishwa na mkutubi au na wageni na wateja wa maktaba yenyewe.

Kwa hivyo ikiwa hatua ya kwanza ni kutafuta watendaji au muigizaji ambaye ana jukumu la mwingiliana na moduli, kuhusisha watu na majukumu yote inaweza kuwa ngumu. Katika kampuni ndogo, mtu mmoja anaweza kucheza majukumu anuwai wakati katika kampuni kubwa kunaweza kuwa na watu wengi ambao wana jukumu moja. 

Inaonekana ni busara zaidi kutambua majukumu, badala ya watu au watumiaji.

Kwa hivyo:

  • mtumiaji wa mfumo wa programu anafafanua sababu za mabadiliko;
  • jukumu ni familia ya kazi ambayo inakidhi mahitaji ya muigizaji fulani, ambayo ni ya mtumiaji wa mfumo;
  • watendaji, mtumiaji anakuwa chanzo cha mabadiliko kwa familia ya utendaji ambayo inapaswa kukidhi hitaji la mtumiaji;
  • mabadiliko ya mahitaji ya mtumiaji, inaongoza mabadiliko ya utendaji;

Kanuni MANGO

Wacha tuone mifano kadhaa

Tuseme tuna darasa la Kitabu ambalo linajumuisha dhana ya kitabu na utendaji wake.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Kitabu Kizuri";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    fanya kazi ukurasa unaofuata () {

        // ukurasa unaofuata

    }

    kazi printCurrentPage () {

        echo "yaliyomo kwenye ukurasa wa sasa";

    }

}

Hili ni darasa la kawaida sana. Tunayo kitabu, na darasa linaweza kutupa kichwa, wanaweza kutupa mwandishi, na wanaweza kuendelea. Mwishowe, inaweza pia kuchapisha ukurasa wa sasa kwenye skrini. 

Walakini, kuna shida ndogo. 

Kufikiria juu ya watendaji wanaohusika katika usimamizi wa kitu hicho cha Kitabu, wanaweza kuwa nani? 

Tunaweza kufikiria kwa urahisi wahusika wawili tofauti hapa: Usimamizi wa vitabu (kama maktaba) Na Utaratibu wa uwasilishaji wa data

Kwa hivyo tuna watendaji wawili tofauti ambao wanaingiliana na darasa.

Kwa kifupi darasa hili hufanya mchanganyiko kati ya:

  • mantiki ya biashara na 
  • uwasilishaji 

hii inaweza kuwa shida kwa sababu inakiuka kanuni moja ya dhima (SRP). 

Tunawezaje kubadilisha, tunawezaje kuboresha nambari hii kuheshimu kanuni ya uwajibikaji mmoja?

Angalia nambari ifuatayo:

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        echo "yaliyomo kwenye ukurasa wa sasa";

    }

}

Kichapishaji kiolesura {

    kaziPrintaPage ($ ukurasa);

}

darasa StampaLibro kutekeleza Printer {

    kaziPrintaPages ($ ukurasa) {

        echo ukurasa wa $;

    }

}

 

darasa HtmlPrinter hutumia Printa {

    kaziPrintaPages ($ ukurasa) {

        mwangwi ' '. $ ukurasa. ' ';

    }

}

Mfano huu rahisi sana unaonyesha jinsi ya kutenganisha uwasilishaji kutoka kwa mantiki ya biashara, na kwa kufuata SRP inatoa faida kubwa katika kubadilika kwa mradi wetu.

Wacha tuangalie mfano mwingine:

Mfano sawa na ule hapo juu ni wakati kitu kinaweza kujiokoa na kujipatia yenyewe kutoka kwa uwasilishaji.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        kurudi "yaliyomo kwenye ukurasa wa sasa";

    }

    kazi kuokoa () {

        $ filename = '/ nyaraka /'. $ hii-> kupataTitolo (). '-'. $ hii-> getAuthor ();

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

    }

}

Kama hapo awali, hapa pia tunaweza kutambua watendaji tofauti kama Usimamizi wa vitabu (kama maktaba) Na Uvumilivu. Wakati wowote tunataka kubadilisha njia tunayokwenda kutoka ukurasa kwenda ukurasa, tunahitaji kubadilisha darasa hili. Tunaweza kuwa na sababu kadhaa za mabadiliko.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        kurudi "yaliyomo kwenye ukurasa wa sasa";

    }

}

darasa rahisiFilePersistence {

    kazi kuokoa (Kitabu $ kitabu) {

        $ filename = '/ nyaraka /'. $ kitabu-> GetTitle (). '-'. $ kitabu-> getAuthor ();

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

    }

}

Kuhamisha shughuli ya kuendelea kwa darasa lingine kutatenganisha majukumu wazi na tutakuwa huru kubadilishana njia za kuendelea bila kuathiri darasa letu la Vitabu. Kwa mfano, kutekeleza darasa la DatabasePersistence itakuwa jambo dogo, na mantiki yetu ya biashara iliyojengwa karibu na shughuli za kitabu haitabadilika.

Endelea kwa kusoma kanuni ya pili Fungua / Ilifungwa ->

Maoni ya 1

Acha maoni

Il tuo indirizzo email zisizo Sara pubblicato. I Campi sono obbligatori contrassegnati *

kanuni ya liskov
Mafunzo ya
Kanuni ya Uingizwaji wa Liskov, kanuni ya tatu SOLID

Madarasa ya watoto hayapaswi kuathiri au kubadilisha fasili za aina ya darasa la wazazi. Dhana ya kanuni hii ilianzishwa na Barbara Liskov katika hotuba kuu ya mkutano wa 1987 na baadaye ikachapishwa katika nakala pamoja na Jannette Wing mnamo 1994. Ufafanuzi wao wa asili…

mwenendo wa uuzaji wa google
Mafunzo ya
Jinsi ya kutumia Mwelekeo wa Google kwa uuzaji wa wakati halisi

Shida kubwa zaidi ambayo makampuni yalikumbana nayo mnamo 2020 ni kuelewa ni sehemu gani za bidhaa kutofautisha biashara zao: kwa kweli sekta nyingi za viwandani zimepata athari kubwa na kuifanya iwe ngumu kwa kampuni kuzipenya, haswa kama mchezaji mpya. Sekta chache sana za utengenezaji ...

mkakati wa ujasusi wa biashara
mbinu za
Mikakati ya kufanikiwa Akili ya Biashara

Kuunda mkakati wa mafanikio kwa Akili yako ya Biashara huanza na maono sahihi ya malengo. Tunaona hapa chini vidokezo vya kimsingi. Kutathmini hali ya sasa Ingekuwa kosa kubwa kudharau jambo hili. Kutathmini hali ya sasa kunamaanisha kuchambua michakato, miundo ..