Decompose เป็นไลบรารี Kotlin Multiplatform สำหรับแบ่งโค้ดของคุณออกเป็นส่วนประกอบตรรกะทางธุรกิจที่คำนึงถึงวงจรชีวิตที่มีโครงสร้างแบบต้นไม้ (หรือที่เรียกว่า BLoC) พร้อมฟังก์ชันการกำหนดเส้นทางและ UI ที่เสียบได้ (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React ฯลฯ) .
โปรดดูเว็บไซต์โครงการสำหรับเอกสารและ API
หากคุณมีคำถามหรือความคิดเห็น - มีส่วนการสนทนา ยินดีต้อนรับสู่ช่อง Kotlin Slack - #decompose!
⚡⚡⚡ ดาวเด่นประเด็นการอภิปรายคำขอดึง ฯลฯ อยู่ที่ไหน?
หลังจากใช้เวลา 5 ปีในการทำงานกับโปรเจ็กต์ต่างๆ สำหรับ Badoo/Bumble ตอนนี้ฉันได้ออกไปผจญภัยอีกครั้งแล้ว ในส่วนหนึ่งของการเปลี่ยนแปลงนั้น ฉันถูกขอให้โอนพื้นที่เก็บข้อมูลนี้ไปยังบัญชี Badoo GitHub
ตอนนี้ฉัน ทำงานในโครงการนี้ต่อไป โดยเป็นการคัดลอก
ไม่ควรมีการเปลี่ยนแปลงใดๆ ที่เกี่ยวข้องกับการโอนนี้ ลิงก์ภายนอกส่วนใหญ่ไม่ควรเสียหาย ลิงก์ที่เก็บก็เหมือนกัน: arkivanov/Decompose โปรดแจ้งปัญหาในพื้นที่เก็บข้อมูลนี้ หากคุณคิดว่ามีบางอย่างเสียหายหรือทำงานไม่ถูกต้อง
สิ่งที่ได้รับผลกระทบจากการโอนเป็นส่วนใหญ่มีดังนี้:
- ย้ายดาวทั้งหมดแล้ว
- ประเด็นและข้อหารือทั้งหมดก็ถูกถ่ายโอนเช่นกัน ฉันจะพยายามอย่างเต็มที่เพื่อเติมเต็มช่องว่างที่นี่
- คำขอดึงทั้งหมดที่มีประวัติความคิดเห็นทั้งหมดก็หายไปเช่นกัน
ฉันจะพยายามอย่างเต็มที่เพื่อโครงการนี้และเพื่อชุมชนต่อไป! ทำธุรกิจได้ตามปกติ!
แหล่งข้อมูลเพิ่มเติม:
ทำไมต้องสลายตัว?
- Decompose แบ่งโค้ดออกเป็นองค์ประกอบขนาดเล็กและเป็นอิสระ และจัดระเบียบเป็นแผนผัง แต่ละองค์ประกอบหลักจะรับรู้เฉพาะรายการย่อยที่อยู่บริเวณใกล้เคียงเท่านั้น
- แยกส่วนวาดขอบเขตที่ชัดเจนระหว่างโค้ด UI และโค้ดที่ไม่ใช่ UI ซึ่งให้ประโยชน์ดังต่อไปนี้:
- แยกข้อกังวลได้ดีขึ้น
- UI เฉพาะแพลตฟอร์มที่เสียบได้ (เขียน, SwiftUI, Kotlin/React ฯลฯ )
- รหัสตรรกะทางธุรกิจสามารถทดสอบได้ด้วยการทดสอบหน่วยหลายแพลตฟอร์มล้วนๆ
- สถานะการนำทางถูกเปิดเผยโดยสมบูรณ์ - เสียบ UI ใดๆ ที่คุณต้องการ เคลื่อนไหวตามที่คุณต้องการโดยใช้ API ของเฟรมเวิร์ก UI ที่คุณชื่นชอบ หรือใช้ API ที่กำหนดไว้ล่วงหน้า
- การนำทางเป็นฟังก์ชันล้วนๆ จากสถานะเก่าไปสู่สถานะใหม่ - นำทางโดยไม่มีขีดจำกัด
- การพึ่งพาการฉีดที่เหมาะสม (DI) และการผกผันของการควบคุม (IoC) ผ่านคอนสตรัคเตอร์ รวมถึงแต่ไม่จำกัดเฉพาะอาร์กิวเมนต์ที่ปลอดภัยต่อประเภท
- ตรรกะการนำทางที่ใช้ร่วมกัน
- ส่วนประกอบที่คำนึงถึงวงจรการใช้งาน
- ส่วนประกอบในแบ็คสแต็กจะไม่ถูกทำลาย แต่ยังคงทำงานในเบื้องหลังโดยไม่มี UI
- การเก็บรักษาสถานะ (อัตโนมัติบน Android ด้วยตนเองบนเป้าหมายอื่น ๆ ทั้งหมดผ่าน
kotlinx-serialization
) - อินสแตนซ์ที่เก็บรักษา (aka ViewModels) มากกว่าการเปลี่ยนแปลงการกำหนดค่า (ส่วนใหญ่มีประโยชน์ใน Android)
ถึงเวลามีม!
ตั้งค่า
โปรดตรวจสอบส่วนการติดตั้งของเอกสารประกอบ
แพลตฟอร์มที่รองรับ
โดยทั่วไป Decompose รองรับเป้าหมายต่อไปนี้: android
, jvm
, ios
, watchos
, tvos
, macos
, wasmJs
, js
อย่างไรก็ตาม บางโมดูลไม่รองรับเป้าหมายทั้งหมด หรือการรองรับขึ้นอยู่กับเวอร์ชันสลายตัว โปรดดูเอกสารการติดตั้งสำหรับรายละเอียด
ภาพรวม
ต่อไปนี้เป็นแนวคิดหลักบางประการของห้องสมุด ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบ
- ส่วนประกอบ - ส่วนประกอบทุกชิ้นแสดงถึงตรรกะที่มีวงจรการใช้งานของตัวเอง UI เป็นทางเลือกและเสียบไว้ภายนอก
- ComponentContext - ทุกส่วนประกอบมี [ComponentContext] ของตัวเอง ซึ่งทำให้ส่วนประกอบต่างๆ ทราบวงจรการใช้งาน และช่วยให้สามารถรักษาสถานะ รักษาอินสแตนซ์ (หรือที่เรียกว่า AndroidX
ViewModel
) และการจัดการปุ่มย้อนกลับ - Child Stack - เปิดใช้งานการนำทางระหว่างคอมโพเนนต์ย่อย และยังรองรับการนำทางแบบซ้อนอีกด้วย
- Child Slot - อนุญาตให้ใช้คอมโพเนนต์ลูกครั้งละหนึ่งรายการเท่านั้น หรือไม่อนุญาตเลย
- เพจย่อย - รายการส่วนประกอบย่อยที่มีส่วนประกอบที่เลือกไว้หนึ่งรายการ (เช่น การนำทางแบบเพจเจอร์)
- การนำทางทั่วไป - มอบวิธีการสร้างโมเดลการนำทางที่คุณกำหนดเอง เมื่อไม่มีโมเดลที่กำหนดไว้ล่วงหน้าใดที่เหมาะกับความต้องการของคุณ
- วงจรการใช้งาน - จัดเตรียมวิธีการรับฟังเหตุการณ์วงจรการใช้งานในส่วนประกอบ
- StateKeeper - ทำให้สามารถรักษาสถานะหรือข้อมูลในส่วนประกอบเมื่อถูกทำลาย
- InstanceKeeper - เก็บอินสแตนซ์ไว้ในส่วนประกอบของคุณ (คล้ายกับ AndroidX
ViewModel
) - BackPressedHandler - จัดเตรียมวิธีในการจัดการและสกัดกั้นการกดปุ่มย้อนกลับ
ลำดับชั้นของส่วนประกอบ
ลำดับชั้น UI ที่เสียบได้
โครงสร้างส่วนประกอบทั่วไป
เริ่มต้นอย่างรวดเร็ว
โปรดดูส่วนการเริ่มต้นอย่างรวดเร็วของเอกสาร
ตัวอย่าง
ตรวจสอบส่วนตัวอย่างของเอกสารเพื่อดูคำอธิบายแบบเต็มของแต่ละตัวอย่าง
แม่แบบ
ตรวจสอบที่เก็บเทมเพลตซึ่งอาจใช้ในการเริ่มต้นโปรเจ็กต์ให้กับคุณ
บทความ
แยกส่วน — การทดลองกับคอมโพเนนต์และการนำทางที่คำนึงถึงวงจรการใช้งาน Kotlin Multiplatform
แอปพลิเคชั่น Kotlin ข้ามแพลตฟอร์มอย่างสมบูรณ์ (เกือบ)
การนำทางสามสิบบรรทัดที่ครอบคลุมสำหรับ Jetpack/Multiplatform Compose - หากคุณพบ Decompose verbose และต้องการสิ่งที่สร้างไว้ด้านบนของ Compose
ซีรีส์ "Component-based Approach" โดย Artur Artikov
- ส่วนที่ 1: ต่อสู้กับความซับซ้อนในแอปพลิเคชัน Android
- ส่วนที่ 2: การใช้งานหน้าจอด้วย Decompose Library
ผู้เขียน
ทวิตเตอร์: @arkann1985
หากคุณชอบโครงการนี้คุณสามารถทำได้เสมอ ;-)