Vienotas atbildÄ«bas princips, kas pazÄ«stams arÄ« kÄ vienotas atbildÄ«bas princips,
aka vienotas mainÄ«bas princips - ÄrkÄrtÄ«gi slidens Äalis saprast un tÄds nervozs jautÄjums programmÄtÄja intervijÄ.
Mana pirmÄ nopietnÄ iepazÄ«Å”anÄs ar Å”o principu notika pirmÄ kursa sÄkumÄ, kad jaunos un zaļos veda uz mežu, lai no kÄpuriem taisÄ«tu Ä«stus studentus.
MeÅ¾Ä mÅ«s sadalÄ«ja grupÄs pa 8-9 cilvÄkiem katrÄ un sarÄ«kojÄm sacensÄ«bas - kura grupa visÄtrÄk izdzers Å”Åabja pudeli ar nosacÄ«jumu, ka pirmais no grupas ielej degvÄ«nu glÄzÄ, otrs izdzers, un treÅ”ajam ir uzkodas. VienÄ«ba, kas ir pabeigusi darbÄ«bu, pÄriet uz grupas rindas beigÄm.
Gadījums, kad rindas lielums bija trīs reizes, bija laba SRP ievieŔana.
Definīcija 1. Viena atbildība.
OficiÄlÄ vienotÄs atbildÄ«bas principa (SRP) definÄ«cija nosaka, ka katrai vienÄ«bai ir sava atbildÄ«ba un pastÄvÄÅ”anas iemesls, un tai ir tikai viena atbildÄ«ba.
Apsveriet objektu "DzÄrÄjs" (IzgÄzÄjs).
Lai Ä«stenotu SRP principu, mÄs sadalÄ«sim pienÄkumus trÄ«s daļÄs:
- Viens ielej (PourOperation)
- Viens dzÄriens (DrinkUpOperation)
- Vienam ir uzkodas (TakeBiteOperation)
Katrs no procesa dalÄ«bniekiem ir atbildÄ«gs par vienu procesa sastÄvdaļu, tas ir, viÅam ir viena atomÄra atbildÄ«ba - dzert, ieliet vai uzkodas.
DzerÅ”anas bedre savukÄrt ir fasÄde Ŕīm darbÄ«bÄm:
Ńlass Tippler {
//...
void Act(){
_pourOperation.Do() // Š½Š°Š»ŠøŃŃ
_drinkUpOperation.Do() // Š²ŃŠæŠøŃŃ
_takeBiteOperation.Do() // Š·Š°ŠŗŃŃŠøŃŃ
}
}
KÄpÄc?
CilvÄka programmÄtÄjs raksta kodu pÄrtiÄ·u cilvÄkam, un pÄrtiÄ·u cilvÄks ir neuzmanÄ«gs, stulbs un vienmÄr steidzas. ViÅÅ” var turÄt un saprast aptuveni 3 - 7 terminus vienlaikus.
DzÄrÄja gadÄ«jumÄ Å”ie termini ir trÄ«s. TaÄu, ja kodu uzrakstÄ«sim ar vienu lapu, tad tajÄ bÅ«s rokas, brilles, kautiÅi un nebeidzami strÄ«di par politiku. Un tas viss bÅ«s vienas metodes korpusÄ. Esmu pÄrliecinÄts, ka esat redzÄjis Å”Ädu kodu savÄ praksÄ. Nav humÄnÄkais pÄrbaudÄ«jums psihei.
No otras puses, pÄrtiÄ·u cilvÄks ir paredzÄts, lai simulÄtu reÄlÄs pasaules objektus savÄ galvÄ. SavÄ iztÄlÄ viÅÅ” var tos saspiest, salikt no tiem jaunus priekÅ”metus un tÄpat izjaukt. IedomÄjieties veca modeļa automaŔīnu. SavÄ iztÄlÄ var atvÄrt durvis, noskrÅ«vÄt durvju apdari un ieraudzÄ«t tur logu pacelÅ”anas mehÄnismus, kuru iekÅ”pusÄ bÅ«s zobrati. Bet jÅ«s nevarat redzÄt visas maŔīnas sastÄvdaļas vienlaikus, vienÄ "sarakstÄ". Vismaz "pÄrtiÄ·u cilvÄks" nevar.
TÄpÄc cilvÄku programmÄtÄji sarežģītus mehÄnismus sadala mazÄk sarežģītu un strÄdÄjoÅ”u elementu komplektÄ. TomÄr to var sadalÄ«t dažÄdi: daudzÄm vecÄm automaŔīnÄm gaisa vads nonÄk durvÄ«s, un mÅ«sdienu automaŔīnÄs slÄdzenes elektronikas kļūme neļauj iedarbinÄt dzinÄju, kas var bÅ«t problÄma remonta laikÄ.
Tagad SRP ir princips, kas izskaidro, KÄ sadalÄ«ties, tas ir, kur novilkt dalÄ«juma lÄ«niju.
ViÅÅ” saka, ka ir nepiecieÅ”ams sadalÄ«ties pÄc āatbildÄ«basā sadales principa, tas ir, pÄc noteiktu objektu uzdevumiem.
AtgriezÄ«simies pie dzerÅ”anas un priekÅ”rocÄ«bÄm, ko pÄrtiÄ·u cilvÄks saÅem sadalÄ«Å”anÄs laikÄ:
- Kods ir kļuvis ÄrkÄrtÄ«gi skaidrs visos lÄ«meÅos
- Kodu var rakstÄ«t vairÄki programmÄtÄji vienlaikus (katrs raksta atseviŔķu elementu)
- AutomatizÄtÄ testÄÅ”ana ir vienkÄrÅ”ota ā jo vienkÄrÅ”Äks elements, jo vieglÄk to pÄrbaudÄ«t
- ParÄdÄs koda kompozÄ«cija - jÅ«s varat aizstÄt DrinkUpOperation uz operÄciju, kurÄ dzÄrÄjs zem galda lej Ŕķidrumu. Vai arÄ« nomainiet ielieÅ”anas darbÄ«bu ar darbÄ«bu, kurÄ sajaucat vÄ«nu un Å«deni vai degvÄ«nu un alu. AtkarÄ«bÄ no biznesa prasÄ«bÄm jÅ«s varat darÄ«t visu, nepieskaroties metodes kodam Tipplers.Akts.
- Veicot Ŕīs darbÄ«bas, jÅ«s varat salocÄ«t gluton (izmantojot tikai TakeBitOperation), Alkoholisks (lietojot tikai DrinkUpOperation tieÅ”i no pudeles) un atbilst daudzÄm citÄm uzÅÄmÄjdarbÄ«bas prasÄ«bÄm.
(Ak, Ŕķiet, ka tas jau ir OCP princips, un es pÄrkÄpu Ŕīs ziÅas atbildÄ«bu)
Un, protams, mīnusi:
- Mums bÅ«s jÄizveido vairÄk veidu.
- DzÄrÄjs pirmo reizi dzer pÄris stundas vÄlÄk, nekÄ citÄdi bÅ«tu.
DefinÄ«cija 2. VienotÄ mainÄ«gums.
Atļaujiet man, kungi! DzerÅ”anas klasei arÄ« ir viena atbildÄ«ba - tÄ dzer! Un vispÄr vÄrds āatbildÄ«baā ir ÄrkÄrtÄ«gi neskaidrs jÄdziens. KÄds ir atbildÄ«gs par cilvÄces likteni, un kÄds ir atbildÄ«gs par pingvÄ«nu izcelÅ”anu, kas tika apgÄzti pie staba.
ApskatÄ«sim divus dzÄrÄja variantus. PirmajÄ, iepriekÅ” minÄtajÄ, ir trÄ«s klases - ielej, dzer un uzkodas.
Otrais ir uzrakstÄ«ts, izmantojot metodoloÄ£iju āUz priekÅ”u un tikai uz priekÅ”uā, un tajÄ ir visa metodes loÄ£ika RÄ«koties:
//ŠŠµ ŃŃŠ°ŃŃŃŠµ Š²ŃŠµŠ¼Ń Š½Š° ŠøŠ·ŃŃŠµŠ½ŠøŠµ ŃŃŠ¾Š³Š¾ ŠŗŠ»Š°ŃŃŠ°. ŠŃŃŃŠµ ŃŃŠµŃŃŃŠµ ŠæŠµŃŠµŠ½ŃŠŗŃ
Ńlass BrutTippler {
//...
void Act(){
// Š½Š°Š»ŠøŠ²Š°ŠµŠ¼
if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))
throw new OverdrunkException();
// Š²ŃŠæŠøŠ²Š°ŠµŠ¼
if(!_hand.TryDrink(from: _glass, size: _glass.Capacity))
throw new OverdrunkException();
//ŠŠ°ŠŗŃŃŃŠ²Š°ŠµŠ¼
for(int i = 0; i< 3; i++){
var food = _foodStore.TakeOrDefault();
if(food==null)
throw new FoodIsOverException();
_hand.TryEat(food);
}
}
}
Abas Ŕīs klases, raugoties no ÄrÄja novÄrotÄja, izskatÄs pilnÄ«gi vienÄdas, un tÄm ir tÄda pati atbildÄ«ba par ādzerÅ”anuā.
Apjukums!
Tad mÄs pÄrejam tieÅ”saistÄ un uzzinÄm citu SRP definÄ«ciju - vienotÄs mainÄmÄ«bas principu.
SCP norÄda, ka "Modulim ir viens un tikai viens iemesls mainÄ«t". Tas ir: "AtbildÄ«ba ir iemesls pÄrmaiÅÄm."
(Å Ä·iet, ka puiÅ”i, kuri nÄca klajÄ ar sÄkotnÄjo definÄ«ciju, bija pÄrliecinÄti par pÄrtiÄ·a cilvÄka telepÄtiskajÄm spÄjÄm)
Tagad viss nostÄjas savÄs vietÄs. AtseviŔķi varam mainÄ«t lieÅ”anas, dzerÅ”anas un naŔķoÅ”anÄs procedÅ«ras, bet paÅ”Ä dzÄrÄjÄ varam mainÄ«t tikai darbÄ«bu secÄ«bu un sastÄvu, piemÄram, uzkodu pirms dzerÅ”anas izkustinot vai pievienojot grauzdiÅa rÄdÄ«jumu.
PieejÄ āForward and Only Forwardā viss, ko var mainÄ«t, tiek mainÄ«ts tikai metodÄ RÄ«koties. Tas var bÅ«t lasÄms un efektÄ«vs, ja ir maz loÄ£ikas un tas reti mainÄs, bet bieži vien tas beidzas ar Å”ausmÄ«gÄm metodÄm, katrÄ 500 rindiÅÄs, kurÄs ir vairÄk ja-paziÅojumu, nekÄ nepiecieÅ”ams, lai Krievija pievienotos NATO.
DefinÄ«cija 3. IzmaiÅu lokalizÄcija.
DzÄrÄji bieži nesaprot, kÄpÄc viÅi pamoduÅ”ies sveÅ”Ä dzÄ«voklÄ«, vai kur atrodas viÅu mobilais tÄlrunis. Ir pienÄcis laiks pievienot detalizÄtu reÄ£istrÄÅ”anu.
SÄksim reÄ£istrÄÅ”anu ar ielieÅ”anas procesu:
class PourOperation: IOperation{
PourOperation(ILogger log /*....*/){/*...*/}
//...
void Do(){
_log.Log($"Before pour with {_hand} and {_bottle}");
//Pour business logic ...
_log.Log($"After pour with {_hand} and {_bottle}");
}
}
IekapsulÄjot to iekÅ”Ä PourOperation, rÄ«kojÄmies gudri no atbildÄ«bas un iekapsulÄÅ”anas viedokļa, bet tagad esam apmulsuÅ”i ar mainÄ«guma principu. Papildus paÅ”ai darbÄ«bai, kas var mainÄ«ties, mainÄma kļūst arÄ« pati mežizstrÄde. Jums bÅ«s jÄatdala un jÄizveido Ä«paÅ”s reÄ£istrators lieÅ”anas operÄcijai:
interface IPourLogger{
void LogBefore(IHand, IBottle){}
void LogAfter(IHand, IBottle){}
void OnError(IHand, IBottle, Exception){}
}
class PourOperation: IOperation{
PourOperation(IPourLogger log /*....*/){/*...*/}
//...
void Do(){
_log.LogBefore(_hand, _bottle);
try{
//... business logic
_log.LogAfter(_hand, _bottle");
}
catch(exception e){
_log.OnError(_hand, _bottle, e)
}
}
}
RÅ«pÄ«gais lasÄ«tÄjs to pamanÄ«s LogAfter, PieteiktiesPirms Šø OnError var mainÄ«t arÄ« atseviŔķi, un, pÄc analoÄ£ijas ar iepriekÅ”ÄjÄm darbÄ«bÄm, tiks izveidotas trÄ«s klases: PourLoggerBefore, PourLoggerAfter Šø PourErrorLogger.
Un atceroties, ka dzÄrÄjam ir trÄ«s operÄcijas, mÄs iegÅ«stam deviÅas mežizstrÄdes klases. RezultÄtÄ viss dzerÅ”anas aplis sastÄv no 14 (!!!) nodarbÄ«bÄm.
Hiperbola? Diez vai! PÄrtiÄ·u vÄ«rs ar sadalÄ«Å”anÄs granÄtu sadalÄ«s ālejniekuā karafe, glÄzÄ, lieÅ”anas operatoros, Å«dens apgÄdes dienestÄ, molekulu sadursmes fiziskajÄ modelÄ« un nÄkamo ceturksni mÄÄ£inÄs atŔķetinÄt atkarÄ«bas bez globÄlie mainÄ«gie. Un ticiet man, viÅÅ” neapstÄsies.
TieÅ”i Å”ajÄ brÄ«dÄ« daudzi nonÄk pie secinÄjuma, ka SRP ir pasakas no rozÄ karaļvalstÄ«m, un dodas spÄlÄt nÅ«deles...
... nekad neuzzinot par treÅ”Äs Srp definÄ«cijas esamÄ«bu:
āVienotÄs atbildÄ«bas princips nosaka to lietas, kas ir lÄ«dzÄ«gas pÄrmaiÅÄm, jÄglabÄ vienuviet". vai "KÄdas izmaiÅas kopÄ jÄglabÄ vienuviet"
Tas ir, ja mÄs mainÄm darbÄ«bas reÄ£istrÄÅ”anu, tad mums tas ir jÄmaina vienuviet.
Tas ir ļoti svarÄ«gs punkts - tÄ kÄ visos iepriekÅ” minÄtajos SRP skaidrojumos bija teikts, ka veidus bija nepiecieÅ”ams sasmalcinÄt, kamÄr tie tika sasmalcinÄti, tas ir, viÅi uzlika objekta izmÄram āaugÅ”Äjo robežuā, un tagad mÄs jau runÄjam par āapakÅ”Äjo robežuā . Citiem vÄrdiem sakot, SRP ne tikai prasa "sasmalcinÄt drupinÄÅ”anas laikÄ", bet arÄ« nepÄrspÄ«lÄt - "nesasmalciniet savstarpÄji saistÄ«tas lietas". Å Ä« ir lielÄ cÄ«Åa starp Okama skuvekli un pÄrtiÄ·u vÄ«ru!
Tagad dzÄrÄjam vajadzÄtu justies labÄk. Papildus tam, ka nav nepiecieÅ”ams sadalÄ«t IPourLogger reÄ£istrÄtÄju trÄ«s klasÄs, mÄs varam arÄ« apvienot visus reÄ£istrÄtÄjus vienÄ tipÄ:
class OperationLogger{
public OperationLogger(string operationName){/*..*/}
public void LogBefore(object[] args){/*...*/}
public void LogAfter(object[] args){/*..*/}
public void LogError(object[] args, exception e){/*..*/}
}
Un, ja pievienojam ceturto darbÄ«bas veidu, tad tÄ reÄ£istrÄÅ”ana jau ir gatava. Un paÅ”u darbÄ«bu kods ir tÄ«rs un bez infrastruktÅ«ras trokÅ”Åiem.
RezultÄtÄ mums ir 5 nodarbÄ«bas dzerÅ”anas problÄmas risinÄÅ”anai:
- IzlieÅ”anas operÄcija
- DzerÅ”anas operÄcija
- IestrÄgÅ”anas darbÄ«ba
- MežizstrÄdnieks
- DzÄrÄju fasÄde
Katrs no tiem ir stingri atbildÄ«gs par vienu funkcionalitÄti, un tam ir viens iemesls izmaiÅÄm. Visi noteikumi, kas lÄ«dzÄ«gi izmaiÅÄm, atrodas netÄlu.
ReÄlÄs dzÄ«ves piemÄrs
Reiz mÄs rakstÄ«jÄm pakalpojumu B2B klienta automÄtiskai reÄ£istrÄÅ”anai. Un GOD metode parÄdÄ«jÄs 200 lÄ«dzÄ«ga satura rindÄm:
- Dodieties uz 1C un izveidojiet kontu
- Izmantojot Å”o kontu, dodieties uz maksÄjumu moduli un izveidojiet to tur
- PÄrbaudiet, vai galvenajÄ serverÄ« nav izveidots konts ar Å”Ädu kontu
- Izveidot jaunu kontu
- Pievienojiet reÄ£istrÄcijas rezultÄtus maksÄjumu modulÄ« un 1c numuru reÄ£istrÄcijas rezultÄtu pakalpojumam
- Pievienojiet Å”ai tabulai konta informÄciju
- Izveidojiet Å”im klientam punktu numuru punktu pakalpojumÄ. NosÅ«tiet Å”im pakalpojumam savu 1c konta numuru.
Un Å”ajÄ sarakstÄ bija vÄl aptuveni 10 biznesa operÄcijas ar Å”ausmÄ«gu savienojamÄ«bu. Konta objekts bija vajadzÄ«gs gandrÄ«z visiem. Punkta ID un klienta vÄrds bija nepiecieÅ”ams pusei zvanu.
PÄc stundu ilgas pÄrveidoÅ”anas mÄs varÄjÄm sadalÄ«t infrastruktÅ«ras kodu un dažas nianses darbÄ ar kontu atseviŔķÄs metodÄs/klasÄs. Dieva metode to padarÄ«ja vienkÄrÅ”Äku, taÄu bija palikuÅ”as 100 koda rindiÅas, kuras vienkÄrÅ”i nevÄlÄjÄs tikt vaļÄ.
Tikai pÄc dažÄm dienÄm kļuva skaidrs, ka Ŕīs āvieglÄsā metodes bÅ«tÄ«ba ir biznesa algoritms. Un ka sÄkotnÄjais tehnisko specifikÄciju apraksts bija diezgan sarežģīts. Un tas ir mÄÄ£inÄjums sadalÄ«t Å”o metodi gabalos, kas pÄrkÄps SRP, nevis otrÄdi.
FormÄlisms.
Ir pienÄcis laiks atstÄt mÅ«su dzÄrÄju vienus. Nosusiniet asaras - mÄs kÄdreiz pie tÄ noteikti atgriezÄ«simies. Tagad formalizÄsim Ŕī raksta zinÄÅ”anas.
FormÄlisms 1. SRP definÄ«cija
- Atdaliet elementus tÄ, lai katrs no tiem bÅ«tu atbildÄ«gs par vienu lietu.
- AtbildÄ«ba nozÄ«mÄ "iemesls mainÄ«t". Tas nozÄ«mÄ, ka katram elementam ir tikai viens iemesls izmaiÅÄm biznesa loÄ£ikas ziÅÄ.
- IespÄjamas izmaiÅas biznesa loÄ£ikÄ. jÄbÅ«t lokalizÄtam. Elementiem, kas mainÄs sinhroni, jÄbÅ«t tuvumÄ.
FormÄlisms 2. NepiecieÅ”amie paÅ”pÄrbaudes kritÄriji.
Es neesmu redzÄjis pietiekamus kritÄrijus SRP izpildei. Bet ir nepiecieÅ”ami nosacÄ«jumi:
1) PajautÄjiet sev, ko dara Ŕī klase/metode/modulis/pakalpojums. jums uz to jÄatbild ar vienkÄrÅ”u definÄ«ciju. ( Paldies
paskaidrojumus
TomÄr dažreiz ir ļoti grÅ«ti atrast vienkÄrÅ”u definÄ«ciju
2) Kļūdas laboÅ”ana vai jaunas funkcijas pievienoÅ”ana ietekmÄ minimÄlo failu/klaÅ”u skaitu. IdeÄlÄ gadÄ«jumÄ - viens.
paskaidrojumus
TÄ kÄ atbildÄ«ba (par lÄ«dzekli vai kļūdu) ir ietverta vienÄ failÄ/klasÄ, jÅ«s precÄ«zi zinÄt, kur meklÄt un ko rediÄ£Ät. PiemÄram: reÄ£istrÄÅ”anas operÄciju izvades maiÅas funkcijai bÅ«s jÄmaina tikai reÄ£istrÄtÄjs. Nav nepiecieÅ”ams palaist cauri pÄrÄjam koda daļai.
VÄl viens piemÄrs ir jaunas lietotÄja saskarnes vadÄ«klas pievienoÅ”ana, kas ir lÄ«dzÄ«ga iepriekÅ”Äjiem. Ja tas liek jums pievienot 10 dažÄdas entÄ«tijas un 15 dažÄdus pÄrveidotÄjus, Ŕķiet, ka jÅ«s pÄrspÄ«lÄjat.
3) Ja vairÄki izstrÄdÄtÄji strÄdÄ pie dažÄdÄm jÅ«su projekta funkcijÄm, tad sapludinÄÅ”anas konflikta iespÄjamÄ«ba, tas ir, iespÄjamÄ«ba, ka vienu un to paÅ”u failu/klasi mainÄ«s vairÄki izstrÄdÄtÄji vienlaikus, ir minimÄla.
paskaidrojumus
Ja, pievienojot jaunu darbÄ«bu āIeliet degvÄ«nu zem galdaā, jÄietekmÄ mežizstrÄdÄtÄjs, dzerÅ”anas un lieÅ”anas darbÄ«ba, tad izskatÄs, ka pienÄkumi sadalÄ«ti greizi. Protams, tas ne vienmÄr ir iespÄjams, taÄu mums vajadzÄtu mÄÄ£inÄt Å”o skaitli samazinÄt.
4) Uzdodot precizÄjoÅ”u jautÄjumu par biznesa loÄ£iku (no izstrÄdÄtÄja vai vadÄ«tÄja), jÅ«s stingri ieejat vienÄ klasÄ/failÄ un saÅemat informÄciju tikai no turienes.
paskaidrojumus
Funkcijas, noteikumi vai algoritmi ir rakstÄ«ti kompakti, katrs vienuviet un nav izkaisÄ«ti ar karodziÅiem visÄ koda telpÄ.
5) Nosaukums ir skaidrs.
paskaidrojumus
MÅ«su klase vai metode ir atbildÄ«ga par vienu lietu, un atbildÄ«ba atspoguļojas tÄs nosaukumÄ
AllManagersManagerService ā visticamÄk, Dieva klase
VietÄjais maksÄjums ā iespÄjams, nÄ
FormÄlisms 3. Occam-first izstrÄdes metodoloÄ£ija.
Dizaina sÄkumÄ pÄrtiÄ·u cilvÄks nezina un nejÅ«t visus risinÄmÄs problÄmas smalkumus un var kļūdÄ«ties. JÅ«s varat kļūdÄ«ties dažÄdos veidos:
- Padariet objektus pÄrÄk lielus, apvienojot dažÄdus pienÄkumus
- PÄrstrukturÄÅ”ana, sadalot vienu atbildÄ«bu daudzos dažÄdos veidos
- Nepareizi definÄjiet atbildÄ«bas robežas
Ir svarÄ«gi atcerÄties noteikumu: "labÄk ir pieļaut lielu kļūdu" vai "ja neesat pÄrliecinÄts, nesadaliet to". Ja, piemÄram, jÅ«su klasÄ ir divi pienÄkumi, tad tas joprojÄm ir saprotams un sadalÄms divÄs daļÄs, veicot minimÄlas izmaiÅas klienta kodÄ. Stikla salikÅ”ana no stikla lauskas parasti ir grÅ«tÄka, jo konteksts ir sadalÄ«ts vairÄkos failos un klienta kodÄ nav nepiecieÅ”amo atkarÄ«bu.
Ir pienÄcis laiks to nosaukt par dienu
SRP darbÄ«bas joma neaprobežojas tikai ar OOP un SOLID. Tas attiecas uz metodÄm, funkcijÄm, klasÄm, moduļiem, mikropakalpojumiem un pakalpojumiem. Tas attiecas gan uz āfigax-figax-and-prodā, gan āraÄ·eÅ”u zinÄtnesā izstrÄdi, padarot pasauli mazliet labÄku visur. Ja tÄ padomÄ, tas ir gandrÄ«z visas inženierijas pamatprincips. MaŔīnbÅ«ve, vadÄ«bas sistÄmas un patieÅ”Äm visas sarežģītÄs sistÄmas ir veidotas no komponentiem, un ānepietiekama sadrumstalotÄ«baā atÅem dizaineriem elastÄ«bu, āpÄrmÄrÄ«ga sadrumstalotÄ«baā atÅem dizaineriem efektivitÄti, un nepareizas robežas atÅem viÅiem saprÄtu un sirdsmieru.
SRP nav dabas izgudrots un neietilpst eksaktajÄ zinÄtnÄ. Tas izlaužas no mÅ«su bioloÄ£iskajiem un psiholoÄ£iskajiem ierobežojumiem.Tas ir tikai veids, kÄ kontrolÄt un attÄ«stÄ«t sarežģītas sistÄmas, izmantojot pÄrtiÄ·a cilvÄka smadzenes. ViÅÅ” mums stÄsta, kÄ sadalÄ«t sistÄmu. SÄkotnÄjais formulÄjums prasÄ«ja diezgan daudz telepÄtijas, bet es ceru, ka Å”is raksts notÄ«ra daļu no dÅ«mu aizsega.
Avots: www.habr.com