ฉันพยายามทำสถาปัตยกรรมสำหรับแอป 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'sMVC มีปัญหาแล้วว่ามันบดบังแนวคิดมากมายจนกลายเป็นชื่อ "Massive-View-Controller" ที่สนุกสนานแทนที่จะเป็น "Model-View-Controller" ตอนนี้ปัญหาที่คล้ายกันยังคงดำเนินต่อไปSwiftUIแต่ยิ่งแย่ลงในความคิดของฉัน การนำทางและมุมมองนั้นเชื่อมโยงกันอย่างมากและไม่สามารถแยกได้ ดังนั้นจึงเป็นไปไม่ได้ที่จะใช้มุมมองที่นำมาใช้ซ้ำได้หากมีการนำทาง เป็นไปได้ที่จะแก้ปัญหานี้UIKitแต่ตอนนี้ฉันไม่เห็นวิธีแก้ปัญหาที่มีสติSwiftUI. น่าเสียดายที่ Apple ไม่ได้ให้คำอธิบายวิธีแก้ปัญหาด้านสถาปัตยกรรมให้เรา เรามีแอพตัวอย่างเล็ก ๆ น้อย ๆ
ฉันชอบที่จะพิสูจน์ว่าผิด โปรดแสดงรูปแบบการออกแบบแอพที่สะอาดซึ่งช่วยแก้ปัญหานี้สำหรับแอพที่พร้อมใช้งานขนาดใหญ่
ขอบคุณล่วงหน้า.
อัปเดต: เงินรางวัลนี้จะจบลงในอีกไม่กี่นาทีและน่าเสียดายที่ไม่มีใครสามารถยกตัวอย่างการทำงานได้ แต่ฉันจะเริ่มต้นเงินรางวัลใหม่เพื่อแก้ปัญหานี้หากฉันไม่พบโซลูชันอื่นและเชื่อมโยงที่นี่ ขอบคุณทุกคนสำหรับผลงานยอดเยี่ยมของพวกเขา!