ViennaNET: арын хэсэгт зориулсан номын сангийн багц

хүн бүрт Сайн байна уу!

Бид Raiffeisenbank-н .NET хөгжүүлэгчдийн нийгэмлэг бөгөөд нэг экосистемтэй бичил үйлчилгээг хурдан бий болгоход зориулагдсан .NET Core дээр суурилсан дэд бүтцийн номын сангийн тухай ярихыг хүсч байна. Тэд үүнийг Нээлттэй эх сурвалж руу авчирсан!

ViennaNET: арын хэсэгт зориулсан номын сангийн багц

Түүх бага

Нэгэн удаа бид том цул төсөлтэй байсан бөгөөд энэ нь аажмаар микро үйлчилгээний багц болж хувирсан (энэ үйл явцын онцлогуудын талаар та эндээс уншиж болно. энэ нийтлэл). Энэ явцад бид шинэ бичил үйлчилгээ үүсгэхдээ янз бүрийн дэд бүтцийн шийдлүүдийг хуулбарлах шаардлагатай болдог, тухайлбал бүртгэл хөтлөх, мэдээллийн сан, WCF-тэй ажиллах гэх мэт асуудалтай тулгарсан. Энэ төсөл дээр нэг баг ажилласан бөгөөд хүн бүр дэд бүтэцтэй ажиллах тодорхой арга барилд аль хэдийн дассан байв. Тиймээс бид нийтлэг кодыг тусдаа репозитор болгон хувааж, цуглуулсан номын сангуудыг Nuget багцуудад боож, дотоод Nuget репозитордоо байрлуулсан.

Цаг хугацаа өнгөрч, төсөл аажмаар хуваагдаж, орчин үеийн JS фреймворк дээр клиент талын шинэ модулиудыг бий болгож, тэдгээрийг хөтөч дээр ажиллуулах хүсэл бий болсон. Бид WCF/SOAP-аас REST/HTTP руу шилжиж эхэлсэн тул AspNet WebApi дээр суурилсан үйлчилгээг хурдан эхлүүлэхийн тулд бидэнд шинэ номын сан хэрэгтэй болсон. .Net Framework 4.5-ын анхны хувилбарыг манай архитектор чөлөөт цагаараа бараг өвдөг сөхрөн суулгасан боловч энэ нь Program.cs дээр зөвшөөрөл (NTLM) агуулсан гурван мөр бүхий үйлчилгээг эхлүүлэх боломжтой болсон. логгинг, Swagger, IoC/DI Castle Windsor-д суурилсан, өөрчлөн тохируулсан HTTP клиентүүд нь янз бүрийн толгойнуудыг дамжуулж, төслийн туршид төгсгөл хүртэл бүртгэл хийх боломжийг олгодог. Мөн энэ бүх зүйлийг үйлчилгээний тохиргооны файлд шууд тохируулж болно.

Гэсэн хэдий ч бүх зүйл жигд биш байсан: энэ номын сан нь шинэ модулиудыг нэвтрүүлэхэд туйлын уян хатан биш болсон. Жишээлбэл, хэрэв танд тусгай дунд программ нэмэх шаардлагатай бол та шинэ угсралт үүсгэж, уг үйлчилгээг ажиллуулдаг үндсэн ангиас өвлөн авах шаардлагатай байсан нь туйлын тохиромжгүй байсан. Аз болоход ийм тохиолдол тийм ч олон байгаагүй.

Докер ба Кубернетес нарын эрин үе

Бидний анхааралтай ажиглаж байсан Докер ба Кубернетесийн давалгаа бидэнд хүрэх цаг иржээ: Эцсийн эцэст энэ нь .Net Core-д технологийн дагуу урагшлах сайхан боломж байлаа. Энэ нь үйлчилгээ явуулахын тулд бидэнд шинэ дэд бүтэц хэрэгтэй болно гэсэн үг: зарим номын сангууд .Net Framework-ээс .Net Standard болон .Net Core руу бараг өөрчлөлтгүйгээр шилжсэн, зарим нь бага зэрэг сайжруулсан. Гэхдээ хамгийн гол нь би AspNet Core дээр үйлчилгээ эхлүүлэхтэй холбоотой функцийг дахин боловсруулахыг хүссэн.

Бидний авч үзсэн хамгийн эхний зүйл бол өмнөх хувилбарын гол сул талыг арилгах үзэл баримтлал байсан: уян хатан чанар дутмаг. Тиймээс номын сангийн системийг бүхэлд нь аль болох бие даасан, модульчлагдсан болгож, үйл ажиллагаанд шаардлагатай үйлчилгээг бүтээгчийн хувьд цуглуулахаар шийдсэн.

Гол зорилго нь мэдээллийн сан, автобус болон бусад үйлчилгээтэй хэрхэн харилцах талаар тодорхойлсон нэгдсэн арга барилыг бий болгох явдал юм. Бид интеграцийг хурдан бөгөөд өвдөлтгүй болгохыг хичээсэн бөгөөд хөгжүүлэгчид дэд бүтцээс илүү бизнесийн логик бичихэд анхаарлаа төвлөрүүлж чадсан - энэ нь аль хэдийн бэлэн болсон. Нийтлэг агуулах нь багуудын харилцан үйлчлэлийн туршлагыг сайжруулахад тусалдаг: маш төстэй дотоод дэд бүтцийг ашиглах үед өөр багийн хөгжлийн үйл явцад нэгдэх, туршлага солилцох нь илүү хялбар байдаг.

Тэгээд яагаад бидэнд Нээлттэй эх хэрэгтэй байна вэ?

Бид мэргэжлийн чадвараа харуулж, өндөр чанартай санал хүсэлтийг хүлээн авахыг хүсч байна: банкнаас гадуурх хүн өөрөө ямар нэг зүйлийг авчрах боломжтой болно. Мөн бид энэ салбарт .NET дээр микро үйлчилгээ болон DDD-тэй ажиллах туршлагыг хөгжүүлэхийг сонирхож байна, магадгүй хэн нэгэн хүрээний тодорхой хэсгийг авахыг хүсэх байх.

Үнэндээ, ViennaNET

Одоо илүү дэлгэрэнгүй харцгаая. Бүрэн эх кодыг энд нийтэлсэн болно.

ViennaNET.WebApi.*

Энэхүү номын сангууд нь CompanyHostBuilder үйлчилгээний үүсгэгчийн анги агуулсан "root" ViennaNET.WebApi болон ViennaNET.WebApi.Configurators.* тохируулагчийн багцаас бүрдэх ба тэдгээр нь тус бүр нь үүсгэсэн файлд зарим функцийг нэмж, тохируулах боломжийг олгодог. үйлчилгээ. Тохируулагчдын дотроос та бүртгэл, оношлогоо, баталгаажуулалт, зөвшөөрлийн төрлүүд, swagger гэх мэт холболтуудыг олж болно.

ViennaNET.WebApi.Runners.* нь мөн урьдчилан тохируулсан үйлчилгээ бүтээгчдийг агуулдаг. Эдгээр багцууд нь тохируулагчийг холбох шаардлагатай шинэ үйлчилгээ үүсгэх болгондоо санахгүй байх боломжийг танд олгоно. Гэсэн хэдий ч тэд үйлчилгээ бүтээгчийн үйл ажиллагааг ямар ч байдлаар хязгаарладаггүй.

ViennaNET.Зуучлагч.*

Үйлчилгээний доторх тушаал, хүсэлтийн дотоод зуучлагч автобус үүсгэх боломжийг олгодог номын сангууд. Энэ арга нь DI тарилгын тоог нэг болгон бууруулах боломжийг олгодог, жишээлбэл, хянагчдад. Үүний ачаар та хүсэлтүүдэд янз бүрийн чимэглэгч нэмж оруулах боломжтой бөгөөд энэ нь тэдгээрийн боловсруулалтыг нэгтгэж, кодын хэмжээг бууруулдаг.

ViennaNET.Validation

Баталгаажуулах дүрэм, тэдгээрийн дарааллыг бий болгох ангиудыг агуулсан угсралт. Энэ нь бизнесийн нөхцөл бүрийг энгийн бөгөөд тусдаа дүрмийн хэлбэрээр тайлбарлах боломжийг олгодог тул домэйн баталгаажуулалтыг хэрэгжүүлэхэд маш тохиромжтой.

ViennaNET.Redis

Редисийг санах ойн кэш болгон ашиглахад тохиромжтой, боодолтой номын сан.

ViennaNET.Үзүүлэлтүүд

Тодорхойлолтын загварыг хэрэгжүүлдэг ангиудыг агуулсан угсралт.

Энэ бол бидний багцад байгаа бүх зүйл биш юм. Үлдсэнийг нь харж болно GitHub репозитор дээр. Бид удахгүй мэдээллийн сантай ажиллах номын сангаа OpenSource руу гаргахаар төлөвлөж байна.

Анхаарал тавьсанд баярлалаа, бид таны сэтгэгдэл, хүсэлтийг хүлээж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх