Hello everyone!
Մենք Raiffeisenbank-ում .NET ծրագրավորողների համայնք ենք և ցանկանում ենք խոսել .NET Core-ի վրա հիմնված ենթակառուցվածքային գրադարանների մասին՝ մեկ էկոհամակարգով միկրոծառայությունների արագ ստեղծման համար: Նրանք այն բերեցին բաց կոդով:
Մի քիչ պատմություն
Ժամանակին մենք ունեինք մի մեծ մոնոլիտ նախագիծ, որն աստիճանաբար վերածվեց միկրոծառայությունների մի շարքի (այս գործընթացի առանձնահատկությունների մասին կարող եք կարդալ այստեղ.
Ժամանակն անցավ, նախագիծն աստիճանաբար մասնատվեց, և ցանկություն առաջացավ ստեղծել հաճախորդի կողմից նոր մոդուլներ ժամանակակից JS շրջանակի վրա և գործարկել դրանք բրաուզերում: Մենք սկսեցինք WCF/SOAP-ից անցնել REST/HTTP, ուստի մեզ անհրաժեշտ էին նոր գրադարաններ AspNet WebApi-ի վրա հիմնված ծառայություններն արագ գործարկելու համար: .Net Framework 4.5-ի առաջին տարբերակը պատրաստվել է մեր ճարտարապետի կողմից ազատ ժամանակ գրեթե ծնկի իջած, բայց առանց տուփի այն հնարավորություն է տվել գործարկել մի ծառայություն Program.cs-ում երեք տողերով, որոնք պարունակում են թույլտվություն (NTLM), logging, Swagger, IoC/DI՝ հիմնված Castle Windsor-ի վրա, հարմարեցված HTTP հաճախորդներ, որոնք փոխանցում են տարբեր վերնագրեր՝ ամբողջ ծրագրի ընթացքում վերջնական գրանցում ապահովելու համար: Եվ այս ամբողջը կարող է հետագայում կարգավորվել անմիջապես ծառայության կազմաձևման ֆայլում:
Այնուամենայնիվ, ամեն ինչ չէ, որ հարթ էր. այս գրադարանը չափազանց անճկուն է նոր մոդուլների ներդրման առումով։ Օրինակ, եթե ձեզ անհրաժեշտ էր ավելացնել որոշ հատուկ միջին ծրագիր, դուք պետք է ստեղծեիք նոր հավաքույթ և ժառանգեք ծառայությունը գործարկող բազային դասից, ինչը չափազանց անհարմար էր: Բարեբախտաբար, նման դեպքերը շատ չեն եղել։
Դոկերի և Կուբերնետեսի դարաշրջանը
Եկել է ժամանակը, երբ Docker-ի և Kubernetes-ի ալիքը հասավ մեզ, որին մենք ուշադիր հետևում էինք. ի վերջո, դա հիանալի հնարավորություն էր սկսելու ավելի առաջ շարժվել տեխնոլոգիաներով՝ Net Core-ում: Սա նշանակում է, որ ծառայությունները գործարկելու համար մեզ անհրաժեշտ կլինի նոր ենթակառուցվածք. որոշ գրադարաններ .Net Framework-ից տեղափոխվել են .Net Standard և .Net Core գործնականում առանց փոփոխությունների, որոշները՝ չնչին բարելավումներով: Բայց ամենից շատ ես ուզում էի վերամշակել AspNet Core-ում ծառայությունների գործարկման հետ կապված ֆունկցիոնալությունը:
Առաջին բանը, որ մենք քննարկեցինք, հայեցակարգ էր, որը կվերացնի նախորդ տարբերակի հիմնական թերությունը՝ ճկունության բացակայությունը: Ուստի որոշվեց գրադարանային ողջ համակարգը դարձնել հնարավորինս անկախ և մոդուլային և հավաքել այն ծառայությունները, որոնք անհրաժեշտ են որպես կոնստրուկտոր գործելու համար:
Հիմնական նպատակն է ստեղծել միասնական մոտեցում, որը նկարագրում է, թե ինչպես փոխազդել տվյալների բազաների, ավտոբուսների և այլ ծառայությունների հետ: Մենք փորձեցինք ինտեգրումներն արագ և ցավ չպատճառել, և մշակողները կարող էին կենտրոնանալ բիզնեսի տրամաբանության վրա, այլ ոչ թե ենթակառուցվածքի վրա. այն արդեն պատրաստ է: Ընդհանուր պահոցն օգնում է բարելավել թիմերի միջև փոխգործակցության փորձը. երբ օգտագործվում են շատ նմանատիպ ներքին ենթակառուցվածքներ, ավելի հեշտ է միանալ մեկ այլ թիմի զարգացման գործընթացին և փոխանակել փորձաքննություն:
Իսկ ինչո՞ւ է մեզ պետք բաց կոդով։
Մենք ցանկանում ենք ցույց տալ մեր փորձաքննության հասունությունը և ստանալ բարձրորակ արձագանք. բանկից դուրս գտնվող մարդը կկարողանա ինչ-որ բան բերել իրենից: Մենք նաև շահագրգռված ենք արդյունաբերության մեջ .NET-ով միկրոսերվիսների և DDD-ի հետ աշխատելու պրակտիկաների մշակմամբ, գուցե ինչ-որ մեկը ցանկանա ստանձնել շրջանակի որոշ մասեր:
Իրականում, ViennaNET
Հիմա եկեք ավելի սերտ նայենք:
ViennaNET.WebApi.*
Գրադարանների այս հավաքածուն բաղկացած է «արմատից» ViennaNET.WebApi-ից, որը պարունակում է CompanyHostBuilder ծառայության կառուցողական դասը և ViennaNET.WebApi.Configurators.* կոնֆիգուրատորների մի շարք, որոնցից յուրաքանչյուրը թույլ է տալիս ավելացնել և կարգավորել որոշ գործառույթներ ստեղծվածին: սպասարկում. Կազմաձևիչների շարքում դուք կարող եք գտնել կապեր լոգերի, ախտորոշման, իսկորոշման և թույլտվության տեսակների, սվեյգերի և այլնի համար:
ViennaNET.WebApi.Runners.* պարունակում է նաև նախապես կազմաձևված ծառայությունների ստեղծողներ: Այս փաթեթները թույլ են տալիս չհիշել ամեն անգամ, երբ ստեղծում եք նոր ծառայություն, որը պետք է միացված լինի կոնֆիգուրատորներին: Այնուամենայնիվ, դրանք ոչ մի կերպ չեն սահմանափակում ծառայությունների ստեղծողի ֆունկցիոնալությունը:
ViennaNET.Mediator.*
Գրադարաններ, որոնք թույլ են տալիս ստեղծել ներքին միջնորդ ավտոբուս ծառայության ներսում հրամանների և հարցումների համար: Այս մոտեցումը թույլ է տալիս նվազեցնել DI ներարկումների քանակը մինչև մեկ, օրինակ, կարգավորիչներում: Դրա շնորհիվ հարցումներին կարող եք ավելացնել տարբեր դեկորատորներ, ինչը միավորում է դրանց մշակումը և նվազեցնում կոդի քանակը։
ViennaNET.Վավերացում
Ժողով, որը պարունակում է մի շարք դասեր՝ դրանցից վավերացման կանոններ և հաջորդականություններ ստեղծելու համար: Այն շատ հարմար է տիրույթի վավերացումն իրականացնելու համար, քանի որ թույլ է տալիս նկարագրել բիզնեսի յուրաքանչյուր պայման պարզ և առանձին կանոնի տեսքով։
ViennaNET.Redis
Գրադարան փաթաթիչներով Redis-ի հետ հարմար աշխատելու համար՝ որպես հիշողության քեշ:
ViennaNET.Տեխնիկական պայմաններ
Ժողով, որը պարունակում է դասեր, որոնք իրականացնում են Specification օրինակը:
Սա այն ամենը չէ, ինչ կա մեր հավաքածուում: Մնացածը կարող եք տեսնել
Շնորհակալություն ուշադրության համար, մենք անհամբեր սպասում ենք ձեր մեկնաբանություններին և պահանջներին:
Source: www.habr.com