Ҳар касе, ки дорои таҷрибаи муайян дар барномарезии нармафзор аст, рамзи нармафзорро, ки дигарон навиштаанд, бо истифода аз параметрҳои доварӣ дар асоси роҳи касбашон доварӣ мекунад.
Дар тӯли фаъолияти касбии худ, ман бисёр таҳиягаронро мешинохтам ва ҳазорҳо сатри кодро дидам ва вақте ки ба малакаи таҳиягар ниёз дорам, ман асосан ба ду омил назар мекунам:
Хушбахтона, баъзе асосҳо ё принсипҳое мавҷуданд, ки дар рамзгузорӣ беҳтар шуданро осон мекунанд.
ихтисораи SOLID ифода мекунад:
S: принсипи масъулияти ягона
O: принсипи кушода пӯшида
L: Принсипи ивазкунии Лисков
I: Принсипи тақсимоти интерфейс
D: Принсипи тағирёбии вобастагӣ
Биёед аз таҳқиқи принсипи якуми SOLID шурӯъ кунем, яъне
Синф (ё модул) бояд танҳо як сабаби тағир додан, таҳаввул дошта бошад.
Худи консепсия хеле содда аст, аммо барои ноил шудан ба ин соддагӣ роҳи татбиқ метавонад хеле мушкил бошад. Синф бояд танҳо як сабаби тағирро дошта бошад.
Аммо барои чӣ?
Чаро муҳим аст, ки танҳо як сабаби тағир додан дошта бошем?
Масалан, агар барои тағир додани ду сабаби мухталиф вуҷуд дошта бошад, тасаввур кардан мумкин аст, ки ду дастаи гуногун метавонанд бо як сабаби гуногун бо як рамз кор кунанд. Ҳар яки онҳо бояд ҳалли худро амалӣ кунанд, ки дар сурати забони тартибдодашуда (ба монанди C ++, C # ё Java), метавонад боиси модулҳое гардад, ки бо гурӯҳҳои дигар ё қисматҳои дигари барнома номувофиқ бошанд.
Мисоли дигар, агар шумо забони тафсиркардаро истифода бурда истода бошед, пас шумо бояд як синф ё модулро бо сабабҳои гуногун аз нав санҷед. Ин маънои бештари кор, вақт ва саъй барои назорати сифатро дорад.
Муайян кардани як хусусияте, ки синф ё модул бояд дошта бошад, нисбат ба оддӣ нигоҳ кардани рӯйхати санҷиш барои санҷишҳо хеле мушкилтар аст.
Аммо биёед кӯшиш кунем, ки аз нуқтаи назари техникӣ камтар фикр кунем, яъне кӯшиш кунем, ки корбари синф ё модули худро таҳлил кунем, ки онро истифода мебарад. Ҷанбаи асосие, ки мо бояд ҳамеша дар хотир дошта бошем, он аст, ки корбарони барнома ё системаи таҳиякардаи мо, ки аз ҷониби як модули мушаххас хидмат мекунанд, онҳое ҳастанд, ки тағиротҳоро дархост мекунанд. Хизматгорон хоҳиш мекунанд, ки синф ё модулро иваз кунанд.
Баъзе намунаҳои модулҳо ва истифодаи онҳо:
Пас, агар қадами аввал ҷустуҷӯи актёрҳо ё актёре бошад, ки нақши ҳамсӯҳбатро бо модул дорад, алоқамандии шахсони алоҳида бо ҳама нақшҳо душвор буда метавонад. Дар як ширкати хурд як шахс метавонад якчанд нақшро иҷро кунад, дар як ширкати калон бошад, якчанд нафар одамоне ҳастанд, ки нақши ягона доранд.
Ба ҷои он ки одамон ё корбарон, муайян кардани нақшҳо оқилонатар ба назар мерасанд.
Аз ин рӯ:
Биёед баъзе мисолҳоро бубинем
Фарз мекунем, ки мо як синфи китоб дорем, ки мафҳуми китоб ва фаъолияти онро дар бар мегирад.
Китоби синф {
Функсияи getTitle () {
бозгаштан "Китоби бузург";
}
Функсияи getAuthor () {
бозгашти "Алессандро Барикко";
}
вазифаи nextpage () {
// саҳифаи оянда
}
функсияи printCurrentPage () {
ҳамовоз "мундариҷаи саҳифаи ҷорӣ";
}
}
Ин як синфи хеле муқаррарӣ аст. Мо китоб дорем ва синф метавонад ба мо унвон диҳад, онҳо метавонанд муаллифро ба мо диҳанд ва онҳо метавонанд ба роҳи худ идома диҳанд. Ниҳоят, он инчунин қодир аст, ки сафҳаи ҷориро дар экран чоп кунад.
Бо вуҷуди ин, як мушкили хурд вуҷуд дорад.
Дар бораи фаъолони марбут ба идоракунии объекти Китоб фикр карда, онҳо кӣ буда метавонанд?
Мо дар ин ҷо ба осонӣ дар бораи ду бозигари мухталиф фикр карда метавонем: Идоракунии китоб (ҳамчун китобхон) e Механизми пешниҳоди маълумот (мисли он ки мо мехоҳем мундариҷаро ба корбар расонем: дар экран, интерфейси графикии корбар, интерфейси корбари танҳо матн, шояд чоп).
Аз ин рӯ, мо ду бозигари хеле гуногун дорем, ки бо синф ҳамкорӣ мекунанд.
Дар кӯтоҳ, ин синф дар байни омезишҳо:
ин метавонад мушкилот эҷод кунад, зеро он принсипи ягонаи масъулиятро (SRP) вайрон мекунад.
Чӣ гуна мо метавонем тағир диҳем, чӣ гуна метавонем ин рамзро барои эҳтироми принсипи масъулияти ягона такмил диҳем?
Ба коди зерин нигаред:
Китоби синф {
Функсияи getTitle () {
бозгаштан "Oceano Mare";
}
Функсияи getAuthor () {
бозгашти "Алессандро Барикко";
}
функсияи гардиши саҳифа () {
// саҳифаи оянда
}
Функсияи getCurrentPage () {
ҳамовоз "мундариҷаи саҳифаи ҷорӣ";
}
}
интерфейси Принтер {
функсияи printPage ($ page);
}
class StampaLibro Printer-ро амалӣ мекунад {
функсияи printPages ($ page) {
echo $ page;
}
}
Синфи HtmlPrinter Принтерро иҷро мекунад {
функсияи printPages ($ page) {
ҳамовоз ' '. $ саҳифа. ' ';
}
}
Ин мисоли хеле содда нишон медиҳад, ки чӣ гуна презентатсияро аз мантиқи тиҷорӣ ҷудо кардан мумкин аст ва мутобиқи SRP он дар чандирии лоиҳаи мо бартариҳои калон фароҳам меорад.
Биёед як мисоли дигарро дида бароем:
Мисоли ба мисоли дар боло овардашуда он аст, ки объект метавонад худро аз презентатсия наҷот диҳад ва бозпас гирад.
Китоби синф {
Функсияи getTitle () {
бозгаштан "Oceano Mare";
}
Функсияи getAuthor () {
бозгашти "Алессандро Барикко";
}
функсияи гардиши саҳифа () {
// саҳифаи оянда
}
Функсияи getCurrentPage () {
баргардонидан "мундариҷаи саҳифаи ҷорӣ";
}
Функсияи захира () {
$ filename = '/ document /'. $ this-> getTitolo (). '-'. $ this-> getAuthor ();
file_put_contents ($ номи файл, serialize ($ this));
}
}
Мисли пештара, дар ин ҷо низ мо метавонем фаъолони гуногунро муайян кунем Идоракунии китоб (ҳамчун китобхон) e Матонат. Ҳар вақте ки мо мехоҳем тарзи гузаштан аз саҳифа ба сафҳаро дигар кунем, мо бояд ин синфро иваз кунем. Мо метавонем якчанд сабаби тағирот дошта бошем.
Китоби синф {
Функсияи getTitle () {
бозгаштан "Oceano Mare";
}
Функсияи getAuthor () {
бозгашти "Алессандро Барикко";
}
функсияи гардиши саҳифа () {
// саҳифаи оянда
}
Функсияи getCurrentPage () {
баргардонидан "мундариҷаи саҳифаи ҷорӣ";
}
}
синфи SimpleFilePersistence {
функсияи захира (Китоби $ book) {
$ filename = '/ document /'. $ book-> getTitle (). '-'. $ book-> getAuthor ();
file_put_contents ($ номи файл, serialize ($ book));
}
}
Гузариш додани амалиёти суботкорӣ ба синфи дигар масъулиятҳоро ба таври возеҳ ҷудо мекунад ва мо озод ҳастем бидуни таъсир ба синфи китоби худ мубодилаи усулҳои суботкориро ба роҳ монем. Масалан, татбиқи синфи DatabasePersistence ночиз хоҳад буд ва мантиқи тиҷории мо, ки дар атрофи амалиёти китоб сохта шудааст, тағир нахоҳад ёфт.
Бо хондани принсипи дуввуми Кушодан / Пӯшида -> идома диҳед
Ercole Palmeri
Дар поликлиникаи Катания амалиёти офтальмопластика бо истифода аз намоишгари тиҷоратии Apple Vision Pro анҷом дода шуд…
Рушди малакаҳои хуби моторӣ тавассути рангкунӣ кӯдаконро ба малакаҳои мураккабтаре, ба мисли навиштан омода мекунад. Барои ранг кардан…
Бахши баҳрӣ як қудрати воқеии иқтисодии ҷаҳонӣ аст, ки ба бозори 150 миллиард доллар ҳаракат кардааст ...
Рӯзи душанбеи гузашта рӯзномаи Financial Times бо OpenAI созишнома эълон кард. FT журналистикаи сатҳи ҷаҳонии худро иҷозатнома медиҳад…