Tekel şeytandır ve salt okunur / değişmez duruma sahip singletonlar 'gerçek' problemdir ...
Singletonları okuduktan sonra , Jason cevabında önerildiği gibi Patolojik Yalancılar , singletonların sıklıkla nasıl yanlış kullanıldığına dair en iyi sunulmuş örneği sunan bu küçük tidbit ile karşılaştım .
Global kötü çünkü:
- a. Ad alanı çakışmasına neden olur
- b. Devleti haksız bir şekilde ortaya çıkarır
Singletons söz konusu olduğunda
- a. Onları çağırmanın açık OO yolu çatışmaları önler, bu yüzden a noktası. sorun değil
- b. Durumu olmayan singletonlar (fabrikalar gibi) sorun değildir. Durumlu tektonlar, tekrar değiştirilemeyen veya bir kez yazılan ve çok sayıda (config / özellik dosyaları) olanlar olmak üzere iki kategoriye ayrılabilir. Bunlar fena değil. Bir tür referans sahibi olan Mutable Singletons, bahsettiğiniz kişilerdir.
Son açıklamada blogun 'singleton liar are' kavramına atıfta bulunuyor.
Bu Tekel için nasıl geçerlidir?
Tekel oyununa başlamak için önce:
- önce kuralları belirleriz, böylece herkes aynı sayfada olur
- Oyunun başında herkese eşit bir başlangıç verilir
- karışıklığı önlemek için sadece bir kurallar dizisi sunulur
- kuralların oyun boyunca değişmesine izin verilmiyor
Şimdi, gerçekten tekel oynamamış olan herkes için , bu standartlar en iyi ihtimalle idealdir. Tekel yenilgisinin yutulması zordur, çünkü tekel parayla ilgilidir, eğer kaybederseniz, oyuncuların geri kalanının oyunu bitirmesini dikkatle izlemelisiniz ve kayıplar genellikle hızlı ve ezicidir. Bu nedenle, kurallar genellikle bir noktada bazı oyuncuların kendi çıkarlarına, diğerlerinin pahasına hizmet etmek için bükülür.
Yani arkadaşların Bob, Joe ve Ed ile tekel oynuyorsun. İmparatorluğunuzu hızla inşa ediyorsunuz ve pazar payını katlanarak artırıyorsunuz. Rakipleriniz zayıflıyor ve kan kokusu almaya başlıyorsunuz (mecazi olarak). Arkadaţýn Bob tüm parasýný olabildiđince düţük deđerli mülklere yönlendiriyordu, ancak beklediđi gibi yüksek bir yatırım getirisi almýyor. Bob, kötü şansın inişi olarak Boardwalk'ınıza iner ve oyundan çıkarılır.
Şimdi oyun kolay zar atma ciddi iş gidiyor. Bob başarısızlığa örnek oldu ve Joe ve Ed 'o adam' gibi olmak istemiyorlar. Böylece, önde gelen oyuncu olarak, birdenbire düşman olursunuz. Joe ve Ed, masa altı esnafları, arkadan para enjeksiyonları, değersiz ev değiştirme ve genellikle bir oyuncu zirveye çıkana kadar sizi zayıflatmak için her şeyi yapmaya başlarlar.
Sonra, bunlardan biri kazanmak yerine, süreç baştan başlar. Birdenbire, sonlu bir kurallar dizisi hareketli bir hedef haline gelir ve oyun Survivor'dan bu yana her yüksek puanlı gerçeklik TV şovunun temelini oluşturacak sosyal etkileşimlere dönüşür. Neden, çünkü kurallar değişiyor ve nasıl / neden / neyi temsil etmeleri gerektiği konusunda fikir birliği yok ve daha da önemlisi, kararları veren hiç kimse yok. Bu noktada oyundaki her oyuncu kendi kurallarını yapıyor ve kaos, iki oyuncu yoldaşlığı sürdürmek ve yavaşça vazgeçmek için çok yorgun olana kadar devam ediyor.
Dolayısıyla, bir oyunun kural kitabı tek birtonu doğru bir şekilde temsil ederse, tekel kural kitabı istismarın bir örneği olacaktır.
Bu programlama için nasıl geçerlidir?
Değişken tek tonların ortaya çıkardığı açık iş parçacığı güvenliği ve senkronizasyon sorunlarının yanı sıra ... Birden fazla farklı kaynak tarafından aynı anda okunabilen / değiştirilebilen ve uygulama yürütme süresi boyunca mevcut olan bir veri kümeniz varsa, muhtemelen geri adım atmak ve "burada doğru veri yapısını kullanıyor muyum?"
Şahsen, ben bir programcı bir uygulama içinde bir tür bükülmüş çapraz iplik veritabanı mağaza olarak kullanarak bir singleton kötüye gördük. Doğrudan kod üzerinde çalıştıktan sonra, yavaş bir şekilde (iş parçacığı güvenli hale getirmek için gerekli tüm iplik kilitleri nedeniyle) ve üzerinde çalışmak için bir kabus olduğunu (senkronizasyon hatalarının öngörülemeyen / aralıklı doğası nedeniyle) ve 'üretim' koşullarında test etmek neredeyse imkansız. Elbette, bazı performans sorunlarının üstesinden gelmek için yoklama / sinyalleme kullanılarak bir sistem geliştirilebilirdi, ancak bu testlerle ilgili sorunları çözmez ve neden bir 'gerçek' veritabanı zaten aynı işlevselliği çok daha sağlam bir şekilde başarabilirse rahatsız olur? / ölçeklenebilir şekilde.
Bir Singleton yalnızca bir singleton'un sağladığı şeye ihtiyacınız varsa bir seçenektir. Bir nesnenin salt okunur bir örneği. Aynı kural, nesnenin özelliklerine / üyelerine de basamaklanmalıdır.