ViennaNET: ชุดไลบรารีสำหรับแบ็กเอนด์

Hello!

เราคือชุมชนของนักพัฒนา .NET ที่ Raiffeisenbank และเราต้องการพูดคุยเกี่ยวกับชุดไลบรารีโครงสร้างพื้นฐานที่ใช้ .NET Core สำหรับการสร้างไมโครเซอร์วิสอย่างรวดเร็วด้วยระบบนิเวศเดียว พวกเขานำมันมาสู่ Open Source!

ViennaNET: ชุดไลบรารีสำหรับแบ็กเอนด์

บิตของประวัติศาสตร์

กาลครั้งหนึ่งเรามีโครงการเสาหินขนาดใหญ่ซึ่งค่อยๆ กลายเป็นชุดไมโครเซอร์วิส (คุณสามารถอ่านเกี่ยวกับคุณสมบัติของกระบวนการนี้ได้ใน บทความนี้). ในกระบวนการนี้ เราพบปัญหาที่เมื่อสร้างไมโครเซอร์วิสใหม่ เรามักจะต้องคัดลอกโซลูชันโครงสร้างพื้นฐานต่างๆ เช่น การตั้งค่าการบันทึก การทำงานกับฐานข้อมูล WCF เป็นต้น ทีมหนึ่งทำงานในโครงการนี้ และทุกคนก็คุ้นเคยกับแนวทางการทำงานกับโครงสร้างพื้นฐานที่กำหนดไว้แล้ว ดังนั้นเราจึงแยกโค้ดทั่วไปออกเป็นที่เก็บแยกต่างหาก ห่อไลบรารีที่รวบรวมไว้ในแพ็คเกจ Nuget และวางไว้ในที่เก็บ Nuget ภายในของเรา

เวลาผ่านไป โปรเจ็กต์ก็ค่อยๆ กระจัดกระจาย และมีความปรารถนาที่จะสร้างโมดูลฝั่งไคลเอ็นต์ใหม่บนเฟรมเวิร์ก JS ที่ทันสมัย ​​และเรียกใช้ในเบราว์เซอร์ เราเริ่มย้ายจาก WCF/SOAP ไปเป็น REST/HTTP ดังนั้นเราจึงต้องการไลบรารีใหม่เพื่อเปิดใช้งานบริการอย่างรวดเร็วโดยใช้ AspNet WebApi เวอร์ชันแรกบน .Net Framework 4.5 สร้างขึ้นโดยสถาปนิกของเราเกือบจะคุกเข่าลงในช่วงเวลาว่าง แต่เมื่อแกะกล่อง ทำให้สามารถเปิดบริการที่มีสามบรรทัดใน Program.cs ที่มีสิทธิ์ (NTLM) การบันทึก, Swagger, IoC/DI บน Castle Windsor, ไคลเอนต์ HTTP แบบกำหนดเองที่ส่งต่อส่วนหัวต่างๆ เพื่อให้การบันทึกตั้งแต่ต้นทางถึงปลายทางตลอดทั้งโปรเจ็กต์ และสิ่งทั้งหมดนี้สามารถกำหนดค่าเพิ่มเติมได้โดยตรงในไฟล์กำหนดค่าบริการ

อย่างไรก็ตาม ไม่ใช่ว่าทุกอย่างจะราบรื่น: ไลบรารีนี้กลับกลายเป็นว่าไม่ยืดหยุ่นอย่างยิ่งในแง่ของการแนะนำโมดูลใหม่ ตัวอย่างเช่น หากคุณต้องการเพิ่มมิดเดิลแวร์พิเศษ คุณต้องสร้างแอสเซมบลีใหม่และสืบทอดจากคลาสพื้นฐานที่รันบริการ ซึ่งไม่สะดวกอย่างยิ่ง โชคดีที่มีกรณีดังกล่าวไม่มากนัก

ยุคของ Docker และ Kubernetes

ถึงเวลาแล้วที่คลื่นของ Docker และ Kubernetes เข้ามาหาเรา ซึ่งเราจับตาดูอย่างใกล้ชิด ท้ายที่สุดแล้ว มันเป็นโอกาสอันดีที่จะเริ่มก้าวต่อไปตามเทคโนโลยีใน .Net Core ซึ่งหมายความว่าเราจะต้องมีโครงสร้างพื้นฐานใหม่เพื่อใช้บริการ: ไลบรารีบางแห่งได้ย้ายจาก .Net Framework ไปเป็น .Net Standard และ .Net Core ในทางปฏิบัติโดยไม่มีการเปลี่ยนแปลง บางส่วนมีการปรับปรุงเล็กน้อย แต่ที่สำคัญที่สุด ฉันต้องการปรับปรุงฟังก์ชันการทำงานที่เกี่ยวข้องกับการเปิดตัวบริการบน AspNet Core

สิ่งแรกที่เราพิจารณาคือแนวคิดที่จะขจัดข้อเสียเปรียบหลักของเวอร์ชันก่อนหน้า นั่นก็คือ การขาดความยืดหยุ่น ดังนั้นจึงตัดสินใจทำให้ระบบห้องสมุดทั้งหมดมีความเป็นอิสระและแยกส่วนได้มากที่สุดเท่าที่จะเป็นไปได้ และรวบรวมบริการที่จำเป็นสำหรับการทำงานในฐานะผู้สร้าง

เป้าหมายหลักคือการสร้างแนวทางแบบครบวงจรที่อธิบายวิธีโต้ตอบกับฐานข้อมูล รถประจำทาง และบริการอื่นๆ เราพยายามทำให้การบูรณาการรวดเร็วและไม่ยุ่งยาก และนักพัฒนาสามารถมุ่งความสนใจไปที่การเขียนตรรกะทางธุรกิจมากกว่าโครงสร้างพื้นฐาน - ซึ่งพร้อมแล้ว พื้นที่เก็บข้อมูลทั่วไปช่วยปรับปรุงประสบการณ์ปฏิสัมพันธ์ภายในทีม: เมื่อใช้โครงสร้างพื้นฐานภายในที่คล้ายกันมาก จะง่ายกว่าในการเข้าร่วมกระบวนการพัฒนาของทีมอื่นและแลกเปลี่ยนความเชี่ยวชาญ

และทำไมเราถึงต้องการ Open Source?

เราต้องการแสดงให้เห็นถึงวุฒิภาวะของความเชี่ยวชาญของเราและรับข้อเสนอแนะคุณภาพสูง: บุคคลภายนอกธนาคารจะสามารถนำบางสิ่งบางอย่างมาเองได้ นอกจากนี้เรายังสนใจในการพัฒนาแนวปฏิบัติสำหรับการทำงานกับไมโครเซอร์วิสและ DDD บน .NET ในอุตสาหกรรม บางทีอาจมีบางคนต้องการเข้ามาแทนที่บางส่วนของเฟรมเวิร์ก

ที่จริงแล้ว ViennaNET

ตอนนี้เรามาดูกันดีกว่า ซอร์สโค้ดแบบเต็มถูกโพสต์ที่นี่.

ViennaNET.WebApi.*

ชุดไลบรารีนี้ประกอบด้วย “รูท” ViennaNET.WebApi ซึ่งมีคลาสตัวสร้างสำหรับบริการ CompanyHostBuilder และชุดตัวกำหนดค่า ViennaNET.WebApi.Configurators* ซึ่งแต่ละตัวช่วยให้คุณสามารถเพิ่มและกำหนดค่าฟังก์ชันการทำงานบางอย่างให้กับไลบรารีที่สร้างขึ้น บริการ. ในบรรดาเครื่องมือกำหนดค่า คุณจะพบการเชื่อมต่อสำหรับการบันทึก การวินิจฉัย ประเภทการรับรองความถูกต้องและการอนุญาต ความผยอง ฯลฯ

ViennaNET.WebApi.Runners.* ยังมีตัวสร้างบริการที่กำหนดค่าไว้ล่วงหน้าด้วย แพ็คเกจเหล่านี้ช่วยให้คุณไม่ต้องจดจำทุกครั้งที่คุณสร้างบริการใหม่ที่ตัวกำหนดค่าจำเป็นต้องเชื่อมต่อ อย่างไรก็ตาม พวกเขาไม่ได้จำกัดฟังก์ชันการทำงานของผู้สร้างบริการแต่อย่างใด

ViennaNET.ผู้ไกล่เกลี่ย.*

ไลบรารีที่ให้คุณสร้างบัสตัวกลางภายในสำหรับคำสั่งและการร้องขอภายในบริการ วิธีการนี้ช่วยให้คุณลดจำนวนการฉีด DI ลงเหลือเพียง XNUMX ครั้ง เช่น ในตัวควบคุม ด้วยเหตุนี้ คุณจึงสามารถเพิ่มตัวตกแต่งต่างๆ ลงในคำขอได้ ซึ่งจะรวมการประมวลผลและลดจำนวนโค้ดลง

ViennaNET.การตรวจสอบความถูกต้อง

แอสเซมบลีที่มีชุดคลาสสำหรับสร้างกฎการตรวจสอบและลำดับจากคลาสเหล่านั้น สะดวกมากสำหรับการดำเนินการตรวจสอบโดเมน เนื่องจากช่วยให้คุณสามารถอธิบายเงื่อนไขทางธุรกิจแต่ละข้อในรูปแบบของกฎที่เรียบง่ายและแยกจากกัน

ViennaNET.Redis

ไลบรารีพร้อมตัวหุ้มเพื่อความสะดวกในการทำงานกับ Redis เป็นแคชในหน่วยความจำ

ViennaNET ข้อมูลจำเพาะ

แอสเซมบลีที่มีคลาสที่ใช้รูปแบบข้อกำหนด

นี่ไม่ใช่ทั้งหมดที่อยู่ในชุดของเรา คุณสามารถดูส่วนที่เหลือ ในพื้นที่เก็บข้อมูล GitHub. เรากำลังวางแผนที่จะเผยแพร่ไลบรารีของเราสำหรับการทำงานกับฐานข้อมูลไปยัง OpenSource เร็วๆ นี้

ขอบคุณสำหรับความสนใจของคุณ เราหวังว่าจะได้รับความคิดเห็นของคุณและดึงคำขอ

ที่มา: will.com

เพิ่มความคิดเห็น