เฟรมเวิร์กการพึ่งพาการฉีด / ตัวระบุตำแหน่งบริการที่เบาเป็นพิเศษสำหรับ Swift 5.x บน iOS
หมายเหตุ: ขณะนี้ตัวแก้ไขเลิกใช้อย่างเป็นทางการแล้วและแทนที่ด้วยระบบการพึ่งพาใหม่ของฉันคือ Factory Factory คือระบบการฉีดขึ้นต่อกันบนคอนเทนเนอร์ที่แท้จริงซึ่งมีความปลอดภัยในเวลาคอมไพล์ และมีขนาดเล็ก เบากว่า และเร็วกว่า Resolver ดีเท่ากับ Resolver โรงงานก็ดีกว่า
เฟรมเวิร์กการพึ่งพาการฉีดรองรับรูปแบบการออกแบบ Inversion of Control นอกเหนือจากคำจำกัดความทางเทคนิคแล้ว การพึ่งพาการฉีดยังประกอบด้วย:
- มอบสิ่งที่จำเป็นให้กับวัตถุเพื่อทำหน้าที่ของมัน
แค่นั้นแหละ. Dependency Injection ช่วยให้เราสามารถเขียนโค้ดที่เชื่อมโยงอย่างหลวมๆ และทำให้ง่ายต่อการนำมาใช้ซ้ำ เยาะเย้ย และทดสอบ
ดูข้อมูลเพิ่มเติมได้ที่: บทนำอย่างอ่อนโยนเกี่ยวกับการฉีดพึ่งพา
มีกลยุทธ์การพึ่งพาแบบคลาสสิกหกกลยุทธ์:
ตัวแก้ไขรองรับทั้งหมด ตามลิงก์เพื่อดูคำอธิบายสั้น ๆ ตัวอย่าง และข้อดีข้อเสียของแต่ละข้อ
เมื่อพูดถึงคำอธิบายประกอบ ตอนนี้ Resolver รองรับการแก้ไขบริการโดยใช้ไวยากรณ์ตัวตัดคุณสมบัติใหม่ใน Swift 5.1
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
เพียงเพิ่มคำสำคัญที่ฉีดแล้วการขึ้นต่อกันของคุณจะได้รับการแก้ไขโดยอัตโนมัติ ดูเอกสารคำอธิบายประกอบสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้และกลยุทธ์อื่นๆ
นอกจากนี้ยังมี wrapper @InjectedObject
ที่สามารถแทรก Observable Objects ในมุมมอง SwiftUI
Resolver ถูกนำไปใช้ในโค้ดจริงมากกว่า 700 บรรทัดในไฟล์เดียว แต่มีฟีเจอร์มากมายใน 700 บรรทัดเหล่านั้น
TLDR: หากไม่มีอะไรอื่น โปรดอ่านเกี่ยวกับการอนุมานประเภทอัตโนมัติ ขอบเขต และตัวเลือก
การใช้ Resolver เป็นกระบวนการง่ายๆ สามขั้นตอน:
ดังที่ได้กล่าวไปแล้ว Resolver คือระบบ Dependency Injection ที่เบามาก ซึ่งใช้งานด้วยโค้ดมากกว่า 700 บรรทัดและรวมอยู่ในไฟล์เดียว
ตัวแก้ไขยังได้รับการออกแบบมาเพื่อประสิทธิภาพอีกด้วย ตัวอย่างเช่น SwinjectStoryboard เป็นระบบการขึ้นต่อกันที่ยอดเยี่ยม แต่ Resolver จะโอเวอร์คล็อกได้เร็วกว่าประมาณ 800% ในการแก้ไขลูกโซ่การขึ้นต่อกันมากกว่า Swinject
และแตกต่างจากระบบอื่นๆ บางระบบ Resolver เขียนด้วย Swift 5 100% โดยไม่มีโค้ด Objective-C การสลับเมธอด หรือการพึ่งพาภายในกับรันไทม์ Objective-C
นอกจากนี้ตัวแก้ไข:
สุดท้ายนี้ ด้วยการอนุมานประเภทอัตโนมัติ คุณมักจะเขียนโค้ดการแทรกการพึ่งพาน้อยลงประมาณ 40-60% โดยใช้ Resolver
Resolver รองรับ CocoaPods และ Swift Package Manager
pod " Resolver "
Resolver นั้นเป็นเพียงไฟล์ต้นฉบับเดียว (Resolver.swift) ดังนั้นการดาวน์โหลดไฟล์และเพิ่มลงในโปรเจ็กต์ของคุณจึงเป็นเรื่องง่าย
โปรดทราบว่าเวอร์ชันปัจจุบันของ Resolver (1.4) รองรับ Swift 5.3 และเวอร์ชันขั้นต่ำของ iOS ที่รองรับในรุ่นนี้คือ iOS 11
อ่านคู่มือการติดตั้งเพื่อดูข้อมูลเกี่ยวกับการสนับสนุนเวอร์ชันก่อนหน้า
ฉันทำให้พื้นที่เก็บข้อมูล Builder ของฉันเป็นแบบสาธารณะแล้ว เป็นแอปพลิเคชัน iOS สไตล์หลัก/รายละเอียดที่เรียบง่ายซึ่งมีตัวอย่าง...
ฉันยังใช้มันเพื่อเล่นกับโค้ดใหม่บางส่วนที่ใช้รูปแบบตัวสร้างสไตล์ SwiftUI เพื่อสร้างการสร้างส่วนต่อประสานกับผู้ใช้และสร้างคำขอเครือข่าย ตรวจสอบออก
อาจเป็นไปได้ว่าการอัปเดตล่าสุดของ Resolver อาจทำให้เกิดการเปลี่ยนแปลงที่สำคัญในฐานโค้ดของคุณ
ตัวแก้ไข 1.4 ปรับปรุงความปลอดภัยและประสิทธิภาพของเธรด ไม่มีการเปลี่ยนแปลงที่เสียหาย แม้ว่าการเข้าถึงขอบเขตของ Resolver โดยตรงจะเลิกใช้แล้วก็ตาม ดู: ขอบเขต
Resolver 1.3 เพิ่มช่องว่างชื่อให้กับ Resolver การลงทะเบียนชื่อช่วยให้การเติมข้อความอัตโนมัติดีขึ้น และทำให้โค้ดของคุณปลอดภัยยิ่งขึ้นโดยการลดข้อผิดพลาดในการประเมินรันไทม์ที่อาจเกิดขึ้น นี่คือการเปลี่ยนแปลงที่เป็นไปได้ ดู: อินสแตนซ์ที่มีชื่อ
ตัวแก้ไข 1.2 เปลี่ยนวิธีการส่งผ่านอาร์กิวเมนต์ไปยังโรงงานการจดทะเบียนเพื่อให้การสนับสนุนที่ดีขึ้นสำหรับการส่งผ่านและการจัดการทั้งอาร์กิวเมนต์เดี่ยวและหลายข้อ นี่คือการเปลี่ยนแปลงครั้งใหญ่ ดู: การส่งผ่านและการจัดการข้อโต้แย้งหลายข้อ
Resolver 1.5 อัปเดตกลไกการลงทะเบียนและการแคชหลายอย่างที่ใช้ภายใน Resolver สิ่งนี้อาจไม่เป็นปัญหาเว้นแต่คุณจะเขียนบางสิ่งที่ขึ้นอยู่กับพฤติกรรมภายในของ Resolver
หากคุณต้องการสนับสนุนงานของฉันใน Factory และ Resolver ลองพิจารณาเป็นผู้สนับสนุน GitHub! มีหลายระดับสำหรับการสนับสนุนที่เพิ่มขึ้น และแม้แต่การให้คำปรึกษาและการฝึกอบรมของบริษัท
หรือจะซื้อกาแฟให้ฉันสักแก้วก็ได้!
Resolver ได้รับการออกแบบ นำไปใช้ จัดทำเอกสาร และดูแลโดย Michael Long หัวหน้าวิศวกรซอฟต์แวร์ iOS และนักเขียนด้านเทคโนโลยี 1,000 อันดับแรกในสื่อ
Michael ยังเป็นหนึ่งในผู้ชนะรางวัล Open Source Peer Reward ของ Google ในปี 2021 จากผลงานของเขาใน Resolver
ตัวแก้ไขมีให้ภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม