Labākā prakse: Leņķa pakalpojumu veidošana, izmantojot fasāžu dizaina modeli sarežģītām sistēmām

Leņķiskie pakalpojumi

Leņķisko pakalpojumu koncepcija vienmēr jauc iesācējus ar servera puses REST pakalpojumiem. Ja jūs joprojām neesat pārliecināts, kas tas ir, es ieteikšu jums izlasīt leņķisko dokumentāciju

Leņķiskie pakalpojumi ir atbildīgi par lietojumprogrammu datu / biznesa loģikas nodrošināšanu komponentiem. Komponentiem dati jāapkopo / jāsniedz un jāfunkcionē kā savienojums starp skatu un apkopi. Tas ir dienests, kurš var izlemt, vai sniegt izspiestus datus vai doties uz serveri un iegūt datus no datu bāzes / faila / cita pakalpojuma (-iem) utt.

Ideālā gadījumā pakalpojumiem jābūt orientētiem uz īpašībām. Jums ir izvēle izveidot milzīgu pakalpojumu klasi vai mikro pakalpojumu kolekcijas. Pirmajā pieejā ir tikai viens pakalpojums, kas satur visu biznesa loģiku un ko visiem sistēmas komponentiem nodrošina ar leņķiskās atkarības injekcijas palīdzību. Problēma ar šo pieeju ir tā, ka milzu servisa klase tiek uzpūsta, kas savukārt izraisa darbības problēmu. Katrai sastāvdaļai ir jāpiešķir apkalpošana un funkcionalitāte, kas patērētājam vispār nav nepieciešama. Vai jūs domājat, ka tas ir labi?

Otrajā pieejā (plaši ievērota) tiek izveidots īpašam mikropakalpojums. Piemēram, ja jūsu sistēmai ir Login, SignUp, Dashboard komponenti, jums jāveido LoginService, SignUpService, DashboardService utt. Katrā pakalpojumā ir funkcionalitāte, kas nepieciešama noteiktam mērķa komponentam. Tagad šis dizains izskatās labi, vai ne?

Problēma?

Veidojot lielu un sarežģītu vienas lappuses lietojumprogrammu, izmantojot leņķisko, jums drīz būs simtiem un tūkstošiem komponentu klašu. To sakot, jums būs jāveic līdzīgs skaits leņķisko pakalpojumu. Kāda šeit problēma?

Neatkarīgi no tā, cik labu ēku sastāvdaļu un pakalpojumu nosaukšanas kārtību esat ievērojis, būs vajadzīgs laiks, lai izdomātu konkrētu klases nosaukumu konkrētam pakalpojumam. Jūs varat arī rakstīt servisa klases dublikātus ar nedaudz atšķirīgiem nosaukumiem vienai un tai pašai sastāvdaļai, nekā cita komanda. Ja jūs strādājat Extreme Programming modelī, jūsu frontend izstrādātājiem ir jāturpina pārslēgties starp moduļiem / komponentiem / funkcijām. Viņiem nevajadzētu aizņemt daudz laika, lai izdomātu komponentus un saistītos pakalpojumus.

Risinājums

Mēs varam atrisināt šo problēmu, izmantojot fasādes dizaina modeli.

Fasādes dizaina paraugs

Fasāde apspriež sarežģītas apakšsistēmas iekapsulēšanu vienā saskarnes objektā. Tas samazina mācīšanās līkni, kas nepieciešama, lai veiksmīgi izmantotu apakšsistēmu. Tas arī veicina apakšsistēmas atsaistīšanu no potenciāli daudziem klientiem.

Fasādes objektam vajadzētu būt diezgan vienkāršam aizstāvam vai veicinātājam. Tam nevajadzētu kļūt par visu zinošu orākulu vai “dieva” objektu.

Detalizēti lasiet par fasādes dizaina modeli

Fasādes dizaina paraugs

Fasāde darbībā ar leņķa pakalpojumiem

Es ieteiktu veikt šādas darbības, lai izveidotu leņķiskos pakalpojumus, izmantojot fasādes modeli:

Definējiet visus leņķiskos pakalpojumus atbilstoši jūsu biznesa prasībām un / vai turpiniet pievienot vairāk, kā nepieciešams.

Izveidojiet pakalpojumu ar nosaukumu “FacadeService” (šeit droši izmantojiet jebkuru citu vārdu)

Izveidojiet kopīgu NgModule un nodrošiniet visus leņķiskos pakalpojumus

Fasādes servisa ieviešana

Mūsu galvenā diskusija būs tikai par pakalpojumu “FacadeService”.

Mēs esam apsprieduši divas pieejas - milzu apkalpošana salīdzinājumā ar mikro pakalpojumu. Mēs esam redzējuši viņu plusus un mīnusus. Labākais risinājums ir apvienot abus, lai izveidotu pakalpojumu fasāde. Tagad FacadeService klase būs Dieva klase, taču tai nebūs faktiskās funkcionalitātes, bet gan faktisko pakalpojumu iesaiņojums.

FacadeService apkopo visus leņķiskos pakalpojumus minētajā sistēmā. Viena vienkārša pieeja ir ievadīt visus pakalpojumus FacadeService iekšpusē konstruktorā. Bet, ja mēs to darīsim, mēs nonāksim līdzīgā problēmā kā milzu apkalpošanas klasē.

Gudrāks veids būtu apkopot visus leņķiskos pakalpojumus FacadeService iekšpusē un atrisināt to gadījumus no leņķiskā DI iekšpusē piekļuvei īpašumam.

Apspriedīsim AccountService izmantošanu.

FacadeService iekšpusē ir definēts īpašums, ko sauc par accountService. FacadeService funkcijas getOrderList () un getAddress () darbojas kā iesaiņojums faktiskajām accountService metodēm.

Ikreiz, kad tiek atvērts accountService dalībnieks, tiek izpildīts tā saņemšanas īpašuma bloks. Iekšpusē nokļūšanas blokā mēs pārbaudām, vai pamatlauks _accountService tiek aktualizēts. Ja nē, mēs lūdzam leņķisko atkarības inžektoru atrisināt mums piemēru.

Lai piekļūtu leņķa DI dzinējam, mums ir jāinjicē Inejctor Angular iebūvētais pakalpojums FacadeService konstruktora iekšpusē. injector.get () vaicā Leņķa DI motoru, lai atrisinātu pieprasīto pakalpojuma gadījumu, ja tas ir nodrošināts. (Vai atcerieties SharedModule, kur mēs esam snieguši visus pakalpojumus?)

Ja esat uzmanīgi novērojis, mēs esam ieviesuši Singleton dizaina modeli, kā arī sava īpašuma pakalpojuma accountService sadaļu Iekšlietu iegūšana.

Patērējošais (-ie) fasādes pakalpojums

Mums ir AccountService apkopoti FacadeService iekšpusē, un tas ir gatavs lietošanai iekšā OrderComponent un AddressComponent.

Atlikušās sistēmas pabeigšana

Uz līdzīgas piezīmes par accountService ieviešanu jūs varat pabeigt citu leņķisko pakalpojumu ieviešanu FacadeService.

Fasādes dizaina modeļa ieviešana leņķa pakalpojumos

Tiešsaistes demonstrācija:

GitHub repozitorijs:

Kopsavilkums

Fasādes dizaina shēma palīdz mums izveidot sarežģītu leņķisko pielietojumu, nodrošinot vienkāršotu piekļuvi daudziem sarežģītiem leņķiskiem mikropakalpojumiem.

Priekā!