ViennaNET. գրադարանների հավաքածու հետին մասի համար

Hello everyone!

Մենք Raiffeisenbank-ում .NET ծրագրավորողների համայնք ենք և ցանկանում ենք խոսել .NET Core-ի վրա հիմնված ենթակառուցվածքային գրադարանների մասին՝ մեկ էկոհամակարգով միկրոծառայությունների արագ ստեղծման համար: Նրանք այն բերեցին բաց կոդով:

ViennaNET. գրադարանների հավաքածու հետին մասի համար

Մի քիչ պատմություն

Ժամանակին մենք ունեինք մի մեծ մոնոլիտ նախագիծ, որն աստիճանաբար վերածվեց միկրոծառայությունների մի շարքի (այս գործընթացի առանձնահատկությունների մասին կարող եք կարդալ այստեղ. այս հոդվածը). Ընթացքում մենք հանդիպեցինք այն խնդրին, որ նոր միկրոսերվիսներ ստեղծելիս մենք հաճախ ստիպված էինք պատճենել տարբեր ենթակառուցվածքային լուծումներ՝ օրինակ՝ գրանցման կարգավորում, տվյալների բազայի հետ աշխատել, WCF և այլն: Այս նախագծի վրա աշխատել է մեկ թիմ, և բոլորն արդեն սովոր էին ենթակառուցվածքների հետ աշխատելու հաստատված մոտեցմանը: Հետևաբար, մենք բաժանեցինք ընդհանուր ծածկագիրը առանձին պահոցի մեջ, հավաքված գրադարանները փաթաթեցինք Nuget փաթեթներով և տեղադրեցինք մեր ներքին Nuget պահեստում:

Ժամանակն անցավ, նախագիծն աստիճանաբար մասնատվեց, և ցանկություն առաջացավ ստեղծել հաճախորդի կողմից նոր մոդուլներ ժամանակակից 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 օրինակը:

Սա այն ամենը չէ, ինչ կա մեր հավաքածուում: Մնացածը կարող եք տեսնել GitHub-ի պահոցում. Մենք նախատեսում ենք շուտով բացել մեր գրադարանները տվյալների բազաների հետ աշխատելու համար OpenSource-ում:

Շնորհակալություն ուշադրության համար, մենք անհամբեր սպասում ենք ձեր մեկնաբանություններին և պահանջներին:

Source: www.habr.com

Добавить комментарий