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.
SwiftUI
Gezinme içeren yeniden kullanılabilir Görünümler nasıl yapılır ?
Gibi SwiftUI
NavigationLink
kuvvetli 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. NavigationLink
Bu 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 NavigationLink
yeniden 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 ViewC
zaten enjekte edilir ViewB
Ben enjekte önce ViewB
iç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, Environment
hedefleri 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 UIKit
biz erişim çünkü bu mümkündür UIViewController
ve UINavigationController
görünümü arkasında. UIKit's
MVC zaten "Model-View-Controller" yerine "Massive-View-Controller" eğlence adı haline gelen birçok kavramı ezdi. Şimdi benzer bir sorun devam ediyor SwiftUI
ama 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 UIKit
ama ş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!