Ìwé

Ṣii / Pipade, ni ibamu si ilana SOLID

Awọn ohun elo sọfitiwia (awọn kilasi, awọn modulu, awọn iṣẹ, ati bẹbẹ lọ) yẹ ki o ṣii fun itẹsiwaju, ṣugbọn pipade fun ṣiṣatunkọ.

Iye akoko kika: 7 iṣẹju

Ṣiṣẹda sọfitiwia: awọn modulu, awọn kilasi ati awọn iṣẹ ni iru ọna pe nigbati o ba nilo iṣẹ tuntun, a ko gbọdọ ṣe atunṣe koodu to wa tẹlẹ ṣugbọn kuku kọ koodu tuntun ti yoo lo nipasẹ koodu to wa tẹlẹ. Eyi le dun ajeji, paapaa pẹlu awọn ede bii Java, C, C ++ tabi C # nibi ti o kan kii ṣe si koodu orisun funrararẹ nikan ṣugbọn si alakomeji. A fẹ lati ṣẹda awọn ẹya tuntun ni awọn ọna ti ko nilo atunkọ ti awọn alakomeji ti o wa, awọn alaṣẹ, tabi awọn DLL.
OCP ninu ọrọ SOLID

SRP ati OCP iranlowo

A ti rii tẹlẹ ilana SRP ti Ojuse Nikan eyiti o sọ pe module kan yẹ ki o ni idi kan nikan lati yipada. Awọn ilana OCP ati SRP jẹ ibaramu. Koodu ti a ṣe apẹrẹ tẹle ilana SRP yoo tun bọwọ fun awọn ilana OCP. Nigbati a ba ni koodu ti o ni idi kan ṣoṣo lati yipada, ṣafihan ẹya tuntun yoo ṣẹda idi keji fun iyipada yẹn. Nitorinaa SRP ati OCP yoo ṣẹ. Bakanna, ti a ba ni koodu ti o yẹ ki o yipada nikan nigbati iṣẹ akọkọ rẹ ba yipada ati pe ko yẹ ki o yipada nigbati iṣẹ-ṣiṣe tuntun ba ṣafikun, nitorinaa bọwọ fun OCP, yoo julọ bọwọ fun SRP bakanna.
Eyi ko tumọ si pe SRP nigbagbogbo nyorisi OCP tabi idakeji, ṣugbọn ni ọpọlọpọ awọn ọran ti ọkan ninu wọn ba faramọ, ṣiṣe aṣeyọri keji jẹ ohun rọrun.

Apẹẹrẹ ti o ṣẹ ti ilana OCP

Lati oju-ọna imọ-ẹrọ odasaka, Ilana Ṣii / Pipade jẹ irorun. Ibasepo ti o rọrun laarin awọn kilasi meji, bii eyi ti o wa ni isalẹ, rufin ilana OCP.

Kilasi Olumulo lo kilasi Logic taara. Ti a ba nilo lati ṣe kilasi Logic keji ni ọna ti o fun wa laaye lati lo mejeeji lọwọlọwọ ati tuntun, kilasi Logic ti o wa tẹlẹ yoo nilo lati yipada. Olumulo naa ni asopọ taara si imuse ti ọgbọn, ko si ọna fun wa lati pese ọgbọn tuntun laisi ni ipa ti lọwọlọwọ. Ati pe nigba ti a ba sọrọ nipa awọn ede ti a tẹ ni iṣiro, kilasi Olumulo ni o ṣeeṣe ki o nilo awọn iyipada daradara. Ti a ba sọrọ nipa awọn ede ti a kojọ, dajudaju mejeeji Olumulo ti a le ṣiṣẹ ati Logi ti a le ṣiṣẹ tabi ile-ikawe ti o ni agbara yoo nilo isọdọkan ati ifijiṣẹ, o dara lati yago fun nigbati o ba ṣeeṣe.

Pẹlu itọka si ero iṣaaju, a le yọ jade pe eyikeyi kilasi ti o taara lo kilasi miiran, le ja si irufin ilana Ṣi / Ti Pipade. 
Jẹ ki a gba pe a fẹ kọ kilasi ti o ni anfani lati pese ilọsiwaju “ni ipin ogorun” ti faili ti a gbasilẹ, nipasẹ ohun elo wa. A yoo ni awọn kilasi akọkọ meji, Ilọsiwaju ati Faili kan, ati pe Mo ro pe a yoo fẹ lati lo wọn gẹgẹbi atẹle:

function testItCanGetTheProgressOfAFileAsAPercent() {
     $file = new File();
     $file->length = 200;
     $file->sent = 100;
     $progress = new Progress($file);
     $this->assertEquals(50, $progress->getAsPercent());
}

Ninu koodu yii a jẹ awọn olumulo Ilọsiwaju. A fẹ lati gba iye bi ipin kan, laibikita iwọn faili gangan. A lo Faili bi orisun alaye. Faili kan ni gigun ninu awọn baiti ati aaye ti a pe ni eyiti a firanṣẹ eyiti o duro fun iye data ti a firanṣẹ si oluṣeto. A ko fiyesi bii a ṣe ṣe imudojuiwọn awọn iye wọnyi ninu ohun elo naa. A le ro pe ọgbọn idan kan wa ti n ṣe eyi fun wa, nitorinaa ninu idanwo a le ṣeto wọn ni gbangba.

class File {
     public $length;
     public $sent;
}

Kilasi Faili jẹ nkan data ti o rọrun ti o ni awọn aaye meji naa. Dajudaju o yẹ ki o tun ni alaye ati awọn ihuwasi miiran, gẹgẹbi orukọ orukọ, ọna, ọna ibatan, itọsọna lọwọlọwọ, iru, awọn igbanilaaye, ati bẹbẹ lọ.

class Progress {

     private $file;

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

     function getAsPercent() {
          return $this->file->sent * 100 / $this->file->length;
     }

}

Ilọsiwaju jẹ kilasi kan ti o gba faili kan ninu akọle rẹ. Fun alaye, a ti ṣalaye iru oniyipada ninu awọn ipilẹ awọn akọle. Ọna kan ti o wulo kan wa lori Ilọsiwaju, getAsPercent (), eyi ti yoo gba awọn iye ti a firanṣẹ ati ipari lati Faili ki o sọ wọn di ipin ogorun kan. Rọrun ati pe o ṣiṣẹ.

Koodu yii farahan pe o tọ, sibẹsibẹ o rufin ilana Ṣi / Pipade.

Ṣugbọn kilode?

Ati bawo?

Jẹ ki a gbiyanju lati yi awọn ibeere pada

Ohun elo kọọkan yoo nilo awọn ẹya tuntun lati dagbasoke ni akoko pupọ. Ẹya tuntun fun ohun elo wa le jẹ lati gba ṣiṣan orin laaye dipo gbigba awọn faili nikan. Gigun faili naa ni aṣoju ni awọn baiti, iye akoko orin ni iṣẹju-aaya. A fẹ lati pese ọpa ilọsiwaju si awọn olutẹtisi wa, ṣugbọn a le tun lo kilasi ti a kọ loke?

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Rara a ko le ṣe. Ilọsiwaju wa ni asopọ si Faili. O le ṣakoso alaye faili nikan, botilẹjẹpe o tun le lo si akoonu orin. Ṣugbọn lati ṣe eyi a ni lati yipada rẹ, a ni lati jẹ ki Ilọsiwaju mọ orin ati awọn faili. Ti apẹrẹ wa ba tẹle OCP, a ko nilo lati fi ọwọ kan Faili tabi Ilọsiwaju. A le kan lo ilọsiwaju ti o wa tẹlẹ ki o lo o si orin.

Owun to le ṣee ṣe

Awọn ede ti a tẹ ni agbara ni anfani ti ṣiṣakoso awọn oriṣi nkan ni akoko ṣiṣe. Eyi n gba wa laaye lati yọ typehint kuro lati olupilẹṣẹ ilọsiwaju ati pe koodu naa yoo tẹsiwaju lati ṣiṣẹ.

class Progress {

     private $file;

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

    function getAsPercent() {
         return $this->file->sent * 100 / $this->file->length;
     }

}

A le ṣe ifilọlẹ ohunkohun ni Ilọsiwaju. Ati nipasẹ ohunkohun, Mo tumọ si itumọ ọrọ gangan ohunkohun:

class Music {

     public $length;
     public $sent;

     public $artist;
     public $album;
     public $releaseDate;

     function getAlbumCoverFile() {
         return 'Images/Covers/' . $this->artist . '/' . $this->album . '.png';
     }
}

Ati kilasi Orin bii eyi ti o wa loke yoo ṣiṣẹ ni pipe. A le ni irọrun idanwo rẹ pẹlu idanwo ti o jọra si Faili.

function testItCanGetTheProgressOfAMusicStreamAsAPercent() {

     $music = new Music();
     $music->length = 200;
     $music->sent = 100;

     $progress = new Progress($music);

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

Nitorinaa ni ipilẹ eyikeyi akoonu wiwọn le ṣee lo pẹlu kilasi Ilọsiwaju. Boya o yẹ ki a ṣalaye rẹ ni koodu nipa tun yi orukọ iyipada pada:

class Progress {

     private $measurableContent;

     function __construct($measurableContent) {
          $this->measurableContent = $measurableContent;
     }

     function getAsPercent() {
          return $this->measurableContent->sent * 100 / $this->measurableContent->length;
     }

}

Nigba ti a ṣalaye Faili gẹgẹ bi iru-oriṣi, a ni ireti nipa ohun ti kilasi wa le mu. O han gbangba ati pe ti ohunkohun miiran ba wa, aṣiṣe nla kan yoo sọ fun wa.

Ukilasi na ti o bori ọna ti kilasi ipilẹ ki adehun adehun kilasi mimọ ko ni ọla fun nipasẹ kilasi ti o ti jade. 

A ko fẹ pari ni igbiyanju lati pe awọn ọna tabi awọn aaye iraye si lori awọn nkan ti ko ba adehun wa mu. Nigba ti a ni iru ohun elo irufẹ, adehun naa ti ṣalaye nipasẹ rẹ. Awọn aaye ati awọn ọna ti kilasi Faili. Bayi pe a ko ni nkankan, a le fi ohunkohun ranṣẹ, paapaa okun kan ati pe yoo ja si aṣiṣe buburu kan.

Lakoko ti abajade ipari jẹ kanna ni awọn ọran mejeeji, afipamo pe koodu fi opin si, iṣaaju ṣe agbejade ifiranṣẹ to wuyi. Eyi, sibẹsibẹ, jẹ dudu pupọ. Ko si ọna lati mọ kini oniyipada jẹ - okun kan ninu ọran wa - ati kini awọn ohun-ini ti a wa ati ti a ko rii. O nira lati ṣatunṣe ati ṣatunṣe iṣoro naa. Olupilẹṣẹ gbọdọ ṣii kilasi Ilọsiwaju, ka ati loye rẹ. Iwe adehun naa, ninu ọran yii, nigbati o ko ba sọ pato iruwe, jẹ definished nipasẹ ihuwasi ti Ilọsiwaju. O jẹ adehun ti o tumọ ti a mọ si Ilọsiwaju nikan. Ninu apẹẹrẹ wa, o jẹ definished nipa iraye si awọn aaye meji, firanṣẹ ati ipari, ni ọna getAsPercent (). Ni igbesi aye gidi adehun ti o tumọ le jẹ idiju pupọ ati nira lati ṣawari nipa wiwa fun iṣẹju diẹ ni kilasi.

Ojutu yii ni a ṣe iṣeduro nikan ti ko si ọkan ninu awọn imọran miiran ti o wa ni isalẹ le ṣee ṣe ni rọọrun tabi ti wọn yoo ṣe awọn iyipada ayaworan to ṣe pataki ti ko ṣe atilẹyin iṣẹ naa.

Continua leggendo il terzo principio della sostituzione di Liskow —>

Awọn kika ti o jọmọ

Ercole Palmeri

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Awọn mẹrin ọwọn ti Sustainability

Ọrọ imuduro ti wa ni lilo pupọ ni bayi lati tọka awọn eto, awọn ipilẹṣẹ ati awọn iṣe ti a pinnu lati tọju awọn orisun kan pato…

15 May 2024

Bii o ṣe le ṣafikun data ni Excel

Iṣiṣẹ iṣowo eyikeyi ṣe agbejade data pupọ, paapaa ni awọn fọọmu oriṣiriṣi. Tẹ data yii pẹlu ọwọ lati inu iwe Excel si…

14 May 2024

Itupalẹ Cisco Talos ti idamẹrin: awọn imeeli ile-iṣẹ ti o fojusi nipasẹ awọn ọdaràn Ṣiṣejade, Ẹkọ ati Ilera jẹ awọn apakan ti o kan julọ

Ifiweranṣẹ ti awọn imeeli ile-iṣẹ pọ si diẹ sii ju ilọpo meji ni oṣu mẹta akọkọ ti 2024 ni akawe si mẹẹdogun ikẹhin ti…

14 May 2024

Ilana ipinya wiwo (ISP), ipilẹ SOLID kẹrin

Ilana ti ipinya wiwo jẹ ọkan ninu awọn ipilẹ SOLID marun ti apẹrẹ ti o da lori ohun. Kilasi kan yẹ ki o ni…

14 May 2024

Bii o ṣe le ṣeto data ti o dara julọ ati awọn agbekalẹ ni Excel, fun itupalẹ ti o ṣe daradara

Microsoft Excel jẹ irinṣẹ itọkasi fun itupalẹ data, nitori pe o funni ni ọpọlọpọ awọn ẹya fun siseto awọn eto data,…

14 May 2024

Ipari ti o dara fun awọn iṣẹ akanṣe pataki meji Walliance Equity Crowdfunding: Jesolo Wave Island ati Milano Nipasẹ Ravenna

Walliance, SIM ati Syeed laarin awọn oludari ni Yuroopu ni aaye ti Ohun-ini gidi Crowdfunding lati ọdun 2017, n kede ipari…

13 May 2024

Kini Filament ati bii o ṣe le lo Laravel Filament

Filament jẹ ilana idagbasoke Laravel “isakiakia”, n pese ọpọlọpọ awọn paati akopọ ni kikun. O jẹ apẹrẹ lati ṣe irọrun ilana ti…

13 May 2024

Labẹ iṣakoso ti Artificial Intelligences

“Mo gbọdọ pada lati pari itankalẹ mi: Emi yoo ṣe akanṣe ara mi ninu kọnputa ati di agbara mimọ. Ni kete ti gbe ni…

10 May 2024

Ka Innovation ni ede rẹ

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

tẹle wa