Bir süre önce bu konuyu (Karl Bielefeldt'in belirttiği gibi) tartışan gerçekten iyi bir blog okudum, temelde söylediği, UI kit ipliğini güvenli hale getirmenin ve olası kilitlenmelere neden olduğu için güvenli bir şekilde denemenin çok tehlikeli olduğudur. uygulandı, yarış koşulları çerçeveye eklendi.
Bir performans değerlendirmesi de var. Çok fazla değil, ama Swing ilk piyasaya sürüldüğü zaman, performansı (kötü) nedeniyle yoğun bir şekilde eleştirildi, ama bu gerçekten Swing'in hatası değildi, insanların nasıl kullanılacağına dair bilgi eksikliğiydi.
SWT, ihlaliniz durumunda istisnalar atarak iplik güvenliği kavramını zorlar, ama hoş değil, ama en azından farkında olursunuz.
Boyama sürecine bakarsanız, örneğin, elemanların boyandığı sıra çok önemlidir. Bir bileşenin boyanmasının, ekranın diğer bölümlerinde yan etkisi olmasını istemezsiniz. Bir etiketin text özelliğini güncelleyebildiğinizi, ancak iki farklı iş parçacığı tarafından boyandığını, bozuk bir çıktıyla sonuçlanabileceğini hayal edin. Bu nedenle, tüm boyamalar normalde ihtiyaçlar / talepler sırasına göre (tek seferde gerçek fiziksel boya döngülerini azaltmak için yoğunlaştırılmış) tek bir iplik içinde yapılır
Swing’ten JavaFX’e geçişten bahsettiniz, ancak bu sorunu hemen hemen her UI çerçevesiyle (sadece kalın istemciler değil, web de dahil olmak üzere) alırsınız, Swing sorunu sadece vurgulayan biri gibi görünüyor.
UI'ye yapılan çağrıların doğru şekilde senkronize edilmesini sağlamak olan, ara katmanı (kontrolörün kontrolörü?) Tasarlayabilirsiniz. API'nizin UI olmayan kısımlarını UI API perspektifinden nasıl tasarlayabileceğinizi tam olarak bilmek imkansızdır ve çoğu geliştirici, UI API'sine uygulanan herhangi bir iş parçacığı korumasının kısıtlayıcı olduğu veya ihtiyaçlarını karşılamadığı konusunda şikayette bulunacaktır. Gereksinimlerinize dayanarak bu sorunu nasıl çözmek istediğinize karar vermenize izin vermek daha iyi
Dikkate almanız gereken en büyük sorunlardan biri, bilinen girdilere dayanarak belirli bir olay sırasını haklı çıkarma yeteneğidir. Örneğin, kullanıcı pencereyi yeniden boyutlandırırsa, Olay Kuyruğu modeli belirli bir olay sırasının gerçekleşeceğini garanti eder, bu basit görünebilir, ancak sıra diğer iş parçacıkları tarafından tetiklenen olaylara izin verdiyse, sipariş sırasını artık garanti edemezsiniz. hangi olayların meydana gelebileceği (bir yarış koşulu) ve birdenbire farklı durumlar için endişelenmeye başlamalısınız ve başka bir şey olana kadar bir şey yapmamanız ve etrafta devlet bayraklarını paylaşmanız ve spagetti ile son bulmanız gerekiyor.
Tamam, olayları yayınlandıkları zamana göre sipariş eden bir tür kuyruğa alarak çözebilirsiniz, ama zaten sahip olduğumuz şey bu değil mi? Ayrıca, B iş parçacığının A konusunu SONRA olayları üreteceğini garanti edemezsiniz.
İnsanların kodlarını düşünmek zorunda kalmaları için üzülmesinin temel nedeni, kodlarını / tasarımlarını düşünmeleridir. "Neden daha kolay olamaz?" Daha basit olamaz çünkü basit bir problem değil.
PS3'ün ne zaman piyasaya sürüldüğünü ve Sony'nin Cell işlemcisiyle konuştuğunu ve ayrı mantık satırları gerçekleştirme, ses kodunu çözme, video, yükleme ve model verilerini çözme yeteneğini hatırlıyorum. Bir oyun geliştiricisi, “Hepsi harika ama akışları nasıl senkronize ediyorsun?” Diye sordu.
Geliştiricinin bahsettiği sorun, bir noktada, tüm bu ayrı akışların çıktı için tek bir boruya senkronize edilmesi gerektiğiydi. Fakir sunum yapan kişi, aşina oldukları bir konu olmadığı için omuz silkti. Açıkçası, şimdi bu sorunu çözmek için çözümleri vardı, ama o zamanlar komik.
Modern bilgisayarlar aynı anda birçok farklı yerden çok fazla girdi alıyorlar, tüm bu girdilerin işlenmesi ve kullanıcıya uzaktan verilmesi gerekiyor, bu da diğer bilgilerin sunumunu engellemiyor, bu yüzden karmaşık bir sorun Tek bir basit çözüm.
Şimdi, çerçeveler arasında geçiş yapma yeteneğine sahip olmak, bu tasarım için kolay bir şey değil, ANCAK, bir anlığına MVC'yi alın, MVC çok katmanlı olabilir, yani, doğrudan UI çerçevesini yönetme ile ilgilenen bir MVC'ye sahip olabilirsiniz. daha sonra, diğer (potansiyel olarak çok dişli) çerçevelerle etkileşimlerle ilgilenen daha yüksek bir MVC katmanına sarılabilir, daha düşük MVC katmanının nasıl bildirileceğini / güncellendiğini belirlemek bu katmanın sorumluluğundadır.
Daha sonra bu farklı katmanları oluşturmak için tasarım desenleri ve fabrika veya üretici desenleri arayüzünü bağlamak için kodlamayı kullanırsınız. Bu, çok iş parçacıklı çerçevelerin, bir fikir olarak, bir orta katmanın kullanılmasıyla UI katmanından ayrıştırıldığı anlamına gelir.