Eng yaxshi amaliyotlar: murakkab tizimlar uchun fasad dizayni naqshidan foydalanib, burchakli xizmatlarni qurish

Burchaklar xizmatlari

Burchaklardagi xizmatlarning kontseptsiyasi har doim yangilarni REST xizmatlari serverlari bilan aralashtirib yuboradi. Agar siz hali ham uning nima ekanligini aniq bilmasangiz, men sizga burchak hujjatlarini o'qishni maslahat beraman

Burular xizmatlari komponentlarga amaliy ma'lumotlar / biznes mantiqlarini taqdim etish uchun javobgardir. Komponentlar ma'lumotlarni qabul qilishlari va xizmat ko'rsatishlari va ko'rish va xizmat ko'rsatish o'rtasida elim vazifasini bajarishlari kerak. Ushbu xizmat soxta ma'lumotlarni taqdim etish yoki serverga o'tish va ma'lumotlar bazasi / fayl / boshqa xizmat (lar) dan ma'lumotlarni olish yoki bermaslik to'g'risida qaror qabul qilishi mumkin.

Ideal holda, xizmatlar xususiyatga yo'naltirilgan bo'lishi kerak. Siz ulkan xizmat sinfi yoki mikro xizmatlar to'plamini tuzishingiz mumkin. Birinchi usulda, barcha biznes mantiqlarini o'z ichiga oladigan va tizim ichidagi barcha qismlarga burchakka bog'liqlikni in'ektsiya qilish yo'li bilan taqdim etiladigan bitta xizmat bo'lishi kerak. Ushbu yondashuv bilan bog'liq muammo shundaki, ulkan xizmat ko'rsatish sinfi shishiradi, natijada ishlab chiqarishning etakchisi bo'ladi. Har bir komponentga umuman iste'molchi komponenti talab qilinmaydigan xizmat va funktsional imkoniyatlar kiritiladi. Yaxshi deb o'ylaysizmi?

Ikkinchi yondashuvda (keng qo'llaniladi), o'ziga xos mikro xizmat quriladi. Masalan, agar tizimingizda Login, SignUp, Dashboard komponentlari bo'lsa, unda siz LoginService, SignUpService, DashboardService va boshqalarni qurishingiz kerak. Har bir xizmat o'ziga xos maqsadli komponent uchun zarur bo'lgan funktsional imkoniyatlarni o'z ichiga olishi kerak. Endi bu dizayn yaxshi ko'rinadi, shunday emasmi?

Muammo?

Katta va murakkab yagona sahifali dasturni Angular yordamida qurishda, siz tezda yuzlab va minglab komponentlar sinflariga o'tasiz. Shunday qilib, sizga xuddi shunday miqdordagi burchakli xizmatlar kiritiladi. Bu erda muammo nimada?

Qurilish komponentlari va xizmatlarini nomlash to'g'risidagi konventsiyaga rioya qilganingizdan qat'iy nazar, muayyan sinf uchun xizmatning aniq nomini aniqlash uchun vaqt kerak bo'ladi. Shu bilan birga, siz boshqa guruh qurganlarga qaraganda bir xil komponent uchun bir oz boshqacha nomlangan xizmat klassi dublikatini yozib tugatishingiz mumkin. Agar siz Extreme Programming modelida ishlayotgan bo'lsangiz, sizning oldingi ishlab chiquvchilaringiz modullar / komponentlar / xususiyatlar o'rtasida bir-birini almashtirib turishlari kerak. Ularga bog'liq komponentlar va xizmatlarni aniqlash uchun ko'p vaqt ketmasligi kerak.

Qaror

Fasad dizayni naqshidan foydalanib, biz ushbu muammoni hal qila olamiz.

Fasad dizayni naqshlari

Fasad bitta interfeys ob'ekti ichida murakkab quyi tizimni kapsüllashni muhokama qiladi. Bu quyi tizimdan muvaffaqiyatli foydalanish uchun zarur bo'lgan egri chiziqni kamaytiradi. Shuningdek, u quyi tizimni potentsial ko'plab mijozlardan ajratib olishga yordam beradi.

Fasad ob'ekti juda oddiy advokat yoki yordamchi bo'lishi kerak. Bu hamma biladigan orakal yoki "xudo" ob'ekti bo'lmasligi kerak.

Bu erda fasad dizayni naqshini batafsil o'qing

Fasad dizayni naqshlari

Burchaklar xizmatlari bilan fasad

Fasad naqshidan foydalanib, burchakli xizmatlarni yaratish uchun quyidagi qadamlarni tavsiya qilaman:

Barcha burchak xizmatlarini ish ehtiyojingizga qarab aniqlang va / yoki kerak bo'lganda ko'proq qo'shishni davom eting.

"FacadeService" deb nomlangan xizmatni yarating (bu erda boshqa nomlardan foydalaning)

Birgalikda NgModule yarating va barcha burchak xizmatlarini taqdim eting

Fasad xizmatini amalga oshirish

Bizning asosiy bahsimiz faqat "FacadeService" xizmati atrofida bo'ladi.

Biz gigant xizmatga mikro xizmatga nisbatan ikkita yondashuv haqida gaplashdik. Biz ularning ijobiy va salbiy tomonlarini ko'rdik. Eng yaxshi echim - bu xizmat ko'rsatish fasadini yaratish uchun ikkalasini birlashtirish. Endi FacadeService sinfi xudolar sinfi bo'lishi kerak, ammo u funktsional imkoniyatlarga ega emas, balki haqiqiy xizmatlarni o'rashdir.

FacadeService ko'rsatilgan burchakdagi barcha xizmatlarni birlashtiradi. Yagona usul - bu barcha xizmatlarni FacadeService ichidagi konstruktorga kiritish. Agar biz shunday qilsak, gigant xizmat ko'rsatish sinfidagi kabi muammolarga duch kelamiz.

Aqlli usul - bu barcha burchak xizmatlarini FacadeService ichkarisiga jamlash va ularning namunalarini Angliyadagi DI-dan "mulk" ga kirish orqali hal qilish.

Keling, AccountService xizmatidan foydalanishni muhokama qilaylik.

Bizda FacadeService ichida accountService deb nomlangan mulk mavjud. FacadeService-ning getOrderList () va getAddress () funktsiyalari hisob qaydnomalarining haqiqiy usullari uchun o'rash vazifasini bajaradi.

Servis xizmatiga a'zo bo'lganda, uni olish bo'yicha mulk bloki bajariladi. Bloklash blokida _accountService qo'llab-quvvatlanadigan maydon o'rnatilishini tekshiramiz. Agar yo'q bo'lsa, biz burchakka bog'liqlik injektoridan biz uchun misolni hal qilishni so'raymiz.

Angular DI dvigateliga kirish uchun biz FacadeService konstruktoriga Inejctor Angular ichki xizmatini kiritamiz. injektor.get () so'ralgan xizmat namunasini hal qilish uchun Angular DI dvigateliga murojaat qilishi kerak. (Biz barcha xizmatlarni taqdim etgan SharedModule-ni eslaysizmi?)

Agar siz diqqat bilan kuzatgan bo'lsangiz, biz Singleton dizayni namunasini, shuningdek, ServiceService mulkiga ega bo'lish bo'limini yaratdik.

Komponent (lar) ichidagi iste'molchi FacadeService

Bizda AccountadeService FacadeService ichida birlashtirilgan va buyurtmaComponent va AddressComponent ichida ishlatishga tayyor.

Qolgan tizimni tugatish

Hisob qaydnomasi xizmatini joriy etish to'g'risidagi eslatmada FacadeService ichidagi boshqa burchak xizmatlarini amalga oshirishni yakunlashingiz mumkin.

Burchakli xizmatlarda fasad dizayni naqshini amalga oshirish

Jonli namoyish:

GitHub ombori:

Xulosa

Fasad dizayni naqshlari ko'plab murakkab burchakli mikro xizmatlarga soddalashtirilgan kirishni ta'minlash orqali murakkab burchakli dasturni yaratishga yordam beradi.

Xursand bo'ling!