Daha büyük, üretime hazır SwiftUI Uygulaması için mimariyi yapmaya çalışıyorum. Her zaman SwiftUI'deki büyük bir tasarım kusuruna işaret eden aynı soruna koşuyorum.
Hala kimse bana tam çalışmaya ve üretime hazır bir cevap veremedi.
SwiftUIGezinme içeren yeniden kullanılabilir Görünümler nasıl yapılır ?
Gibi SwiftUI NavigationLinkkuvvetli görünümüne bağlı bu daha büyük Uygulamalarda da ölçekler olduğunu basitçe şekilde mümkün değildir. NavigationLinkBu küçük örnek Uygulamalar çalışır, evet - ama bir App birçok Görünümler yeniden kullanmak istediğiniz anda değil. Ve belki de modül sınırları üzerinden tekrar kullanılabilir. (gibi: iOS, WatchOS vb. görünümü yeniden kullanma ...)
Tasarım sorunu: NavigationLinks Görünüm'e sabit kodlanmıştır.
NavigationLink(destination: MyCustomView(item: item))
Ancak bunu içeren görünüm NavigationLinkyeniden kullanılabilir olması gerekiyorsa ben hedef kodlayamaz . Hedefi sağlayan bir mekanizma olmalıdır. Bunu burada sordum ve oldukça iyi bir cevap aldım, ama yine de tam cevap değil:
SwiftUI MVVM Koordinatörü / Yönlendirici / NavigationLink
Fikir, Hedef Bağlantıları yeniden kullanılabilir görünüme enjekte etmekti. Genellikle fikir işe yarıyor ama maalesef bu gerçek Üretim Uygulamalarına göre ölçeklenmiyor. Birden çok yeniden kullanılabilir ekranım olur olmaz, yeniden kullanılabilir bir görünümün ( ViewA) önceden yapılandırılmış bir görüntüleme hedefine ( ViewB) ihtiyaç duyduğu mantıksal sorunla karşılaşıyorum . Ancak ViewBönceden yapılandırılmış bir görüntüleme hedefine de ihtiyaç duyulursa ne olur ViewC? Ben oluşturmak gerekir ViewBşekilde zaten ViewCzaten enjekte edilir ViewBBen enjekte önce ViewBiçine ViewA. Ve böylece .... ama o zaman iletilmesi gereken veriler mevcut olmadığından, tüm yapı başarısız olur.
Sahip olduğum başka bir fikir, Environmenthedefleri enjekte etmek için bağımlılık enjeksiyon mekanizması olarak kullanmaktı NavigationLink. Ancak bunun büyük uygulamalar için ölçeklenebilir bir çözüm değil, az çok bir kesmek olarak düşünülmesi gerektiğini düşünüyorum. Sonuçta Ortamı temelde her şey için kullanacağız. Ancak Çevre aynı zamanda yalnızca View'ların içinde (ayrı Koordinatörlerde veya ViewModellerde değil) kullanılabileceğinden, bu bana göre garip yapılar yaratacaktır.
İş mantığı (örn görmek model kodu) ve görünümü gibi ayrıca navigasyon ayrılması gereken ve de (örneğin Koordinatör deseni) ayrılacak zorunda görüntülemek UIKitbiz erişim çünkü bu mümkündür UIViewControllerve UINavigationControllergörünümü arkasında. UIKit'sMVC zaten "Model-View-Controller" yerine "Massive-View-Controller" eğlence adı haline gelen birçok kavramı ezdi. Şimdi benzer bir sorun devam ediyor SwiftUIama bence daha da kötü. Gezinme ve Görünümler güçlü bir şekilde birleştirilmiştir ve ayrıştırılamaz. Bu nedenle, gezinme içeriyorsa yeniden kullanılabilir görünümler yapmak mümkün değildir. Bunu çözmek mümkün oldu UIKitama şimdi aklı başında bir çözüm göremiyorumSwiftUI. Ne yazık ki Apple bize böyle mimari sorunların nasıl çözüleceğine dair bir açıklama yapmadı. Sadece küçük örnek uygulamalar aldık.
Yanlış kanıtlanmayı çok isterim. Lütfen büyük üretime hazır Uygulamalar için bunu çözen temiz bir Uygulama tasarım deseni gösterin.
Şimdiden teşekkürler.
Güncelleme: Bu ödül birkaç dakika içinde sona erecek ve maalesef hiç kimse çalışan bir örnek sağlayamadı. Ama başka bir çözüm bulamaz ve buraya bağlarsam bu sorunu çözmek için yeni bir ödül başlatacağım. Katkılarından dolayı herkese teşekkürler!