ฉันพยายามทำสถาปัตยกรรมสำหรับแอป SwiftUI ที่มีขนาดใหญ่ขึ้นและพร้อมใช้งาน ฉันใช้เวลาทั้งหมดในปัญหาเดียวกันซึ่งชี้ไปที่ข้อบกพร่องการออกแบบที่สำคัญใน SwiftUI
ยังไม่มีใครสามารถให้คำตอบที่พร้อมสำหรับการทำงานอย่างเต็มที่กับฉันได้
วิธีการใช้ซ้ำ Views ในSwiftUI
ที่มีการนำทาง?
เนื่องจากความSwiftUI
NavigationLink
ผูกพันกับมุมมองอย่างมากจึงไม่สามารถทำได้ในลักษณะที่ปรับขนาดในแอปที่ใหญ่กว่า NavigationLink
ในแอปตัวอย่างขนาดเล็กเหล่านั้นทำงานได้ใช่ - แต่ไม่ใช่ทันทีที่คุณต้องการใช้ Views จำนวนมากในแอปเดียว และอาจนำมาใช้ซ้ำเกินขอบเขตของโมดูล (เช่น: ใช้การดูซ้ำใน iOS, WatchOS, ฯลฯ ... )
ปัญหาการออกแบบ: NavigationLinks ถูกฮาร์ดโค้ดลงในมุมมอง
NavigationLink(destination: MyCustomView(item: item))
แต่ถ้ามุมมองที่มีสิ่งนี้NavigationLink
ควรจะนำมาใช้ซ้ำฉันไม่สามารถ hardcodeปลายทางได้ จะต้องมีกลไกที่ให้ปลายทาง ฉันถามที่นี่และได้คำตอบที่ดี แต่ก็ยังไม่ได้คำตอบทั้งหมด:
SwiftUI MVVM ผู้ประสานงาน / เราเตอร์ / NavigationLink
แนวคิดคือการฉีดลิงค์ปลายทางลงในมุมมองที่นำมาใช้ซ้ำได้ โดยทั่วไปแล้วความคิดนี้ใช้งานได้ แต่น่าเสียดายที่นี่ไม่ได้ปรับใช้กับแอปการผลิตจริง ทันทีที่ฉันมีหน้าจอที่ใช้ซ้ำได้หลายหน้าจอฉันพบปัญหาตรรกะที่มุมมองที่นำมาใช้ซ้ำได้หนึ่งรายการ ( ViewA
) ต้องมีมุมมองปลายทางที่กำหนดไว้ล่วงหน้า ( ViewB
) แต่ถ้าViewB
ต้องการปลายทางการดูที่กำหนดไว้ล่วงหน้าด้วยViewC
ล่ะ ฉันจะต้องสร้างViewB
แล้วในลักษณะที่ผู้ViewC
ถูกฉีดแล้วในViewB
ก่อนที่ผมจะฉีดเข้าไปในViewB
ViewA
และอื่น ๆ .... แต่เนื่องจากข้อมูลที่ในเวลานั้นไม่สามารถใช้ได้การสร้างทั้งหมดล้มเหลว
อีกความคิดหนึ่งที่ฉันได้ถูกใช้เป็นกลไกในการพึ่งพาการฉีดไปยังจุดหมายปลายทางสำหรับฉีดEnvironment
NavigationLink
แต่ฉันคิดว่านี่น่าจะถือว่าเป็นแฮ็กมากกว่าหรือน้อยกว่าและไม่ใช่โซลูชันที่ปรับขนาดได้สำหรับแอพขนาดใหญ่ เราจะใช้สิ่งแวดล้อมเป็นพื้นฐานสำหรับทุกสิ่ง แต่เนื่องจากสภาพแวดล้อมสามารถใช้งานได้เฉพาะภายใน View (ไม่ใช่แยกจากผู้ประสานงานหรือ ViewModels) สิ่งนี้จะสร้างสิ่งแปลกใหม่ในความคิดของฉัน
เช่นตรรกะทางธุรกิจ (เช่นดูรหัสรุ่น) และมุมมองต้องแยกออกจากกันการนำทางและมุมมองต้องแยกออกจากกัน (เช่นรูปแบบผู้ประสานงาน) UIKit
เป็นไปได้เพราะเราเข้าถึงUIViewController
และUINavigationController
อยู่ข้างหลังมุมมอง UIKit's
MVC มีปัญหาแล้วว่ามันบดบังแนวคิดมากมายจนกลายเป็นชื่อ "Massive-View-Controller" ที่สนุกสนานแทนที่จะเป็น "Model-View-Controller" ตอนนี้ปัญหาที่คล้ายกันยังคงดำเนินต่อไปSwiftUI
แต่ยิ่งแย่ลงในความคิดของฉัน การนำทางและมุมมองนั้นเชื่อมโยงกันอย่างมากและไม่สามารถแยกได้ ดังนั้นจึงเป็นไปไม่ได้ที่จะใช้มุมมองที่นำมาใช้ซ้ำได้หากมีการนำทาง เป็นไปได้ที่จะแก้ปัญหานี้UIKit
แต่ตอนนี้ฉันไม่เห็นวิธีแก้ปัญหาที่มีสติSwiftUI
. น่าเสียดายที่ Apple ไม่ได้ให้คำอธิบายวิธีแก้ปัญหาด้านสถาปัตยกรรมให้เรา เรามีแอพตัวอย่างเล็ก ๆ น้อย ๆ
ฉันชอบที่จะพิสูจน์ว่าผิด โปรดแสดงรูปแบบการออกแบบแอพที่สะอาดซึ่งช่วยแก้ปัญหานี้สำหรับแอพที่พร้อมใช้งานขนาดใหญ่
ขอบคุณล่วงหน้า.
อัปเดต: เงินรางวัลนี้จะจบลงในอีกไม่กี่นาทีและน่าเสียดายที่ไม่มีใครสามารถยกตัวอย่างการทำงานได้ แต่ฉันจะเริ่มต้นเงินรางวัลใหม่เพื่อแก้ปัญหานี้หากฉันไม่พบโซลูชันอื่นและเชื่อมโยงที่นี่ ขอบคุณทุกคนสำหรับผลงานยอดเยี่ยมของพวกเขา!