JavaRush /Курсхо /All lectures for TG purposes /Духустарии дурустии ПО

Духустарии дурустии ПО

All lectures for TG purposes
Сатҳи , Дарс
дастрас

Духустарии иерархия

Ҳеҷ гоҳ бояд бевосита ба навиштани классҳои барномаи худ сар накунед. Аввал онро бояд тарроҳӣ кунед. Тарроҳӣ бояд бо меъмории фикршуда анҷом ёбад. Ва барои гирифтани ин меъморӣ, ба шумо лозим аст, ки пай дар пай душуркунии системаро иҷро кунед.

Духустарӣ бояд иерархикӣ гузаронида шавад — аввалан системаро ба модулҳои функсионалии калон/зермодулҳое, ки кори онро дар намуди умумӣ тасвир мекунанд, тақсим мекунанд. Пас аз он модулҳо таҳқиқ карда мешаванд ва ба зер-модулҳо ё объектҳо тақсим мешаванд.

Пеш аз он ки объектҳо ҷудо шаванд, системаро ба блокҳои асосии маъноӣ тақсим кунед, ҳадди аққал фикран. Дар барномаҳои хурд одатан ин хеле осон аст: чанд сатҳи иерархия муфиданд, зеро система аввал ба зерсистемаҳо/пакетҳо тақсим мешавад, ва пакетҳо ба классҳо.

Духустарии иерархия

Ин фикр он қадар маъмулист, ки тахмин меравад. Масалан, чӣ маъно дорад чунин намунаи "меъморӣ" ба мисли Модел-Вид-Контролер (MVC)?

Фақат дар ҷудо кардани намоиш аз логикаи бизнес. Аввалан ҳар барномаи корбарӣ ба ду модул тақсим мешавад — яке барои татбиқи худи логикаи бизнес (Модел) ва дигаре барои ҳамкорӣ бо корбар (Интерфейси Корбар ё Намоиш).

Пас маълум мешавад, ки модулҳо бояд ягон тавр ҳамкорӣ кунанд, барои инҳо Контроллерро илова мекунанд, ки вазифаи он идора кардани ҳамкории модулҳо мебошад. Ба ҳамин тариқ, дар версияи мобилӣ (классикии) MVC намунаи Нозири истифода мешавад, ки View метавонад рӯйдодҳоро аз модел гирандааст ва маълумоти намоишшавандаро дар вақти воқеӣ тағйир диҳад.

Модулҳои типии сатҳи боло, ки дар натиҷаи аввалин тақсими система ба қисмҳои бузурги сохта шудаанд, маҳз ҳамин гунаанд:

  • Логикаи бизнес;
  • Интерфейси корбар;
  • Базаи маълумотҳо;
  • Системаи мубодилаи паёмҳо;
  • Контейнерҳои объектҳо.

Дар тақсими аввал тамоми барнома одатан ба 2-7 (максимум 10 қисм) тақсим мешавад. Агар ба шумораи зиёди қисмҳо тақсим карда шавад, пас хоҳиши гурӯҳбандӣ кардан пайдо мешавад ва мо дубора 2-7 модулҳои сатҳи болоро хоҳем гирифт.

Духустарии функционалӣ

Тақсим ба модулҳо/зермодулҳоро беҳтарин аз рӯи вазифаҳое, ки система ҳал мекунад, иҷро кунед. Вазифаи асосӣ ба зервазифаҳои таркибӣ, ки метавонанд мустақилона ҳал шаванд/анҷом дода шаванд, тақсим мешавад.

Ҳар як модул бояд барои ҳалли ягон зервазифа ҷавобгар бошад ва вазифаи мувофиқ ба он иҷро кунад. Ғайр аз таъиноти функсионалӣ, модул инчунин аз рӯи маҷмӯи маълумоте, ки барои иҷрои вазифаи он заруранд, тавсиф карда мешавад, яъне:

Модул = Функсия + Маълумот, ки барои иҷрои он лозиманд.

Агар духустарӣ ба модулҳо дуруст иҷро карда шавад, ҳамкорӣ бо дигар модулҳо (ки барои дигар вазифаҳо ҷавобгаранд) бояд минималӣ бошад. Он метавонад бошад, аммо набуданаш набояд барои модули шумо назаррас бошад.

Модул — истифодаи як қисми код нест, балки воҳиди барномасозии ҷудогона ва пурраи функсионалӣ мебошад (зермодул), ки барои ҳалли ягон вазифа кафолат медиҳад ва дар идеалӣ метавонад мустақилона ё дар муҳити дигар кор кунад ва истифодаи дубора шавад. Модул бояд як навъ "тамомият, ки қобилияти мустақилияти нисбии дар рафтор ва рушд дошта бошад" бошад. (Кристофер Александер)

Ба ҳамин тариқ, духустарии дуруст асосан ба таҳлили функсияҳои система ва маълумоти зарурӣ барои иҷрои ин функсияҳо асос ёфтааст. Функсияҳо дар ин маврид — на функсияҳои класс ва модулҳо, зеро онҳо объектҳо нестанд. Агар ту дар модул танҳо чанд класс дошта бошӣ, пас аз ҳад зиёд кӯшиш кардаӣ.

Пайвастшавии қавӣ ва заиф

Хеле муҳим аст, ки на бештар аз ҳад таҷзия ба модулҳо кардан. Агар ба навомус як барномаи монолитии Spring диҳед ва хоҳиш кунед онро ба модулҳо тақсим кунад, ӯ ҳар як Spring Bean-ро ба як модул ҷудо мекунад ва фикр мекунад, ки кораш тамом шудааст. Аммо ин тавр нест.

Критери асосии сифати духустарии он аст, ки модулҳо то чӣ андоза ба ҳалли вазифаҳои худ рӯ ба рӯ шудаанд ва мустақиланд.

Инро одатан ба ҳамин тавр ифода мекунанд: "Модулҳои ҳосилшуда аз духустарӣ бояд дар дохил худ зиёдтар ҳамкорӣ (high internal cohesion) ва бо якдигар камтар вобаста бошанд (low external coupling)."

High Cohesion, пайвастшавии қавӣ ё "хамбастагӣ" дар дохили модул, нишон медиҳад, модул худро ба ҳалли як масъалаи маҳдуд мутамарказ карда, ба иҷрои вазифаҳои гуногун ва ё уҳдадориҳои ба ҳам пайваст нашуда машғул нест.

Пайвастшавӣ — cohesion, дараҷае, ки дар он вазифаҳои анҷомдодашавандаи модул бо ҳам вобастаанд, тасвир мекунад.

Натиҷаи High Cohesion принсипи масъулияти ягона мебошад (Single Responsibility Principle — аввалин аз панҷ принсипҳои SOLID), ки ба он мувофиқ нест, ки ҳар як объект/модул бояд танҳо як вазифа дошта бошад ва набояд аз як сабаб зиёдтар барои тағйири он бошад.

Low Coupling, пайвастшавии заиф, маънои онро дорад, ки модулҳо, ки система ба онҳо тақсим шудааст, бояд, агар имконпазир бошад, мустақил ё заиф ба ҳам вобаста бошанд. Онҳо бояд имкони ҳамкорӣ дошта бошанд, аммо дар ин вақт метавонистанд бо якдигар камтар огоҳ бошанд.

Ҳар як модул набояд донад, ки дигар модул чӣ гуна сохта шудааст, ба кадом забон навишта шудааст ва чӣ гуна кор мекунад. Аксар вақт барои ташкили ҳамкорӣ чунин модулҳо аз як контейнер истифода мебаранд, ки ин модулҳо ба он бор карда мешаванд.

Дар тарҳрезии дуруст, ҳангоми тағйири як модул, лозим намеояд, ки дигарҳоро ислоҳ кунед ва ё ин тағйиротҳо минималӣ хоҳанд буд. Хар қадар пайвастшавӣ заиф бошад, ҳамон қадар осон аст, ки барномаро нависед/фаҳмед/васеъ кунед/ислоҳ кунед.

Гумон меравад, ки модулҳои дуруст тарҳрезишуда бояд хусусиятҳои зерин дошта бошанд:

  • Тамомият ва анҷомёбии функсионалӣ — ҳар як модул як функсияро иҷро мекунад, аммо онро хуб ва пурра иҷро мекунад, модул мустақилона маҷмӯи пурраи амалҳоро барои иҷрокунии функсияи худ иҷро мекунад.
  • Як ворид ва як баромад — дар ворид модул барномасозӣ маҷмӯи маълумоти оғозиро мегирад, коркарди мазмунӣ мекунад ва як маҷмӯи маълумоти натиҷавиро бармегардонад, яъне принсипи стандатии IPO — ворид–>процесс–>баромад иҷро мешавад.
  • Мустаҳкамии мантиқӣ — натиҷаи кори модули барномасозӣ танҳо ба маълумоти оғозӣ вобаста аст, аммо аз кори дигар модулҳо вобаста нест.
  • Пайвастшавии иттилоотӣ бо дигар модулҳо заиф аст — мубодилаи иттилоот байни модулҳо бояд ҳарчи бештар кам карда шавад.

Ба навомус хеле сахт аст, ки фаҳмидан ки чӣ тавр пайвастшавии модулҳоро боз ҳам заифтар кардан мумкин аст. Қисман ин дониш бо таҷриба меояд, қисман — пас аз хониши китобҳои оқилона. Аммо беҳтарин кӯмаккунанда таҳлили меъмориҳои барномаҳои аллакай вуҷудбуда мебошад.

Композитсия ба ҷои мерос

Духустарии дуруст — ин як навъ санъат ва вазифаи мураккаб барои аксари барноманависон аст. Соддагӣ дар ин ҷо фиребкунанда аст ва хатогиҳо гарон меоянд.

Боре мешавад, ки модулҳои ҷудокарда ба ҳам сахт шахсбаста мешаванд ва онҳоро мустақилона таҳия кардан ғайримумкин мешавад. Ё аниқ нест, ки кадом функсия ҳар кадоме аз онҳо ҷавобгар аст. Агар шумо ба чунин мушкилот дучор шудед, пас эҳтимолан тақсими модулҳо нодуруст анҷом шудааст.

Ҳамеша бояд фаҳмо бошад, ки кадом нақшро ҳар модул иҷро мекунад. Муайянтарин критери он, ки духустарӣ дуруст иҷро мешавад, ин аст, ки агар модулҳо худ мустақил ва боарзиш бошанд ҳамчун зермодулҳое, ки метавонанд дар канор аз тамоми барнома истифода шаванд (яъне, метавонанд такрорани истифода шаванд).

Духустарии системаро баргузор намуда, сифаташро санҷидан хуб аст, ба худ саволҳо диҳед: "Кадом вазифаро ҳар модул иҷро мекунад?", “Модулҳо то чӣ андоза осон аст барои озмоиш кардан?”, “Мумкин аст модулҳоро мустақилона ё дар муҳити дигар истифода ва ё васеъ кард?”, “То чӣ андоза тағйирот дар як модул ба дигарон таъсир мерасонад?”.

Модулҳо бояд кӯмак кунанд, ки ҳарчи бештар мустақил бошад. Тавре ки пештар гуфта, ин параметри калидии духустарии дуруст мебошад. Аз ин рӯ, онро бояд ба тавре гузаронид, ки модулҳо аз аввал бо ҳам заиф вобаста бошанд. Агар ин ба шумо муяссар шуда бошад, шумо олиҷанобед.

Агар не, дар ин ҷо ҳам ҳама чиз аз даст нарафтааст. Як қатор техникаҳои махсус ва намунаҳо мавҷуданд, ки барои кам кардан ва заиф кардани пайвастшавӣ байни зерсистемаҳо истифода мешаванд. Масалан, дар мавриди MVC барои ин мақсад намунаи “Нозир” истифода мешавад, аммо ҳалҳои дигар низ мумкин аст.

Мумкин аст гуфт, ки техникаҳо барои кам кардани пайвастшавӣ, аниқтараш “асбобҳои асосии меъмор” созанд. Танҳо бояд фаҳманд, ки сухан дар бораи тамоми зерсистемаҳо меравад ва кӯшишҳои пайвастшавӣ бояд дар тамоми сатҳҳои иерархия заиф карда шавад, яъне на танҳо байни классҳо, балки байни модулҳо дар ҳар сатҳи иерархӣ ҳам низ.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION