SORU
8 EYLÜL 2009, Salı


Singleton Deseni ile ilgili sorunlar

Son birkaç gün desen Singleton hakkında bir şeyler okuyordum. Genel algı gerekli olduğu senaryolar bu tür sorunları kendi seti var, çünkü pek çok nadir () muhtemelen olmasıdır

  • Çöp toplama ortamı hafıza yönetimi ile ilgili bir sorun olabilir.
  • Bir çok iş parçacıklı ortamda darboğazlar ve tanıtmak eşitleme sorunlara neden olabilir.
  • Test perspektifi gelen baş ağrısı.

Değil tamamen bu endişeleri elbette bu sorunları geride ama fikirler almaya başladım. Çöp toplama sorunu durumunda olduğu gibi, tek uygulama statik kullanım desen için doğal olan), endişe? Statik örnek uygulama kadar süreceği anlamına geldiği için. Bellek yönetimi (sadece bellek singleton deseni için ayrılan serbest olmayacak anlamına gelir) küçük düşüren bir şey mi?

Çok iş parçacıklı bir kur, bütün konuları tek örneği çekişme içinde olması tabii ki bir tıkanıklık olur. Ama nasıl bu desen kullanımı senkronizasyon sorunları (kesinlikle bir dışlama veya erişimi eşitlemek için böyle bir şey kullanabiliriz) neden olur.

A (birim?)tekiz statik yöntemler alay ya da bir saplama olması zor olan () kullandığından perspektif testi, sorunlara neden olabilir. Bu konuda emin değilim. Birisi bu test kaygısı hakkında ayrıntılı miyiz?

Teşekkürler.

CEVAP
8 EYLÜL 2009, Salı


Çöp toplama ortamı hafıza yönetimi ile ilgili bir sorun olabilir

Tekil oluşturduktan sonra tipik singleton uygulamalarında, Hiç Yok. Singleton ile bazen kabul edilebilir olmayan bu yıkıcı doğa küçük. Eğer singleton büyük ise, o zaman gereksiz yere gerekenden daha fazla bellek kullanarak.

Bu çöp toplayıcı her zaman singleton gerekli olduğuna inanıyorum, çünkü çöp toplayıcı olduğu dillerde daha büyük bir sorun (Python, Java vb gibi). C delete-ıng pointer hile yapabilir. Ancak, bu tek olmalı çünkü solucanlar kendi açar, fakat silerek, olası bir ikinci bir tane oluşturmak için yapıyoruz.

Çoğu durumda, bellek aşırı kullanımı bu bellek performansını aşağılamak değil, ama bir bellek sızıntısı olarak düşünülebilir. Büyük bir singleton ile, kullanıcı bir bilgisayar veya aygıt üzerinde bellek harcıyorsun. (Eğer büyük bir singleton atarsanız bellek parçalanma içine çalıştırabilirsiniz, ama bu genelde olmayan bir endişe).

Bir çok iş parçacıklı ortamda darboğazlar ve tanıtmak eşitleme sorunlara neden olabilir.

Her iş parçacığı aynı nesne erişim ve bir zaman uyumu sağlayıcısı kullanıyorsanız, her iş parçacığı, başka bir tekil kilidi kadar beklemeniz gerekir. Ve eğer bu konuları büyük ölçüde singleton bağlıdır eğer, o zaman bir iş parçacığı ömrünün çoğunu bekleyerek geçiriyor çünkü tek iplik bir çevre performansı düşürebilir.

Eğer uygulama etki alanı sağlar, ancak, her iş parçacığı iş parçacığı zaman geçirmek ve bunun yerine, işleri bu şekilde bir nesne oluşturabilirsiniz.

Test perspektifi gelen baş ağrısı.

Özellikle, bir tek kurucu sadece bir kez test edilebilir. Sırayla tamamen yeni bir test paketi oluşturmak için yapıcıyı yeniden test var. Eğer bu kurucu herhangi bir parametre değil ama gayet iyi, ama bir paremeter kabul eder etmez artık birim teest etkili olabilir.

Ayrıca, tekil olarak etkili bir saplama ve sahte nesneleri kullanmanız zor kullanmak (bu etrafında yolu vardır, ama buna değer daha fazla sorun o olur. Bu... daha fazlası için okumaya devam edin

(Ve kötü bir tasarım da yol açar!)

Tekiz de kötü bir tasarım bir göstergesidir. Bazı programcılar veritabanı sınıf bir singleton yapmak istiyorum. "Bizim uygulama hiçbir zaman iki veritabanını kullanır," bunlar tipik olarak düşünüyorum. Ama, sense iki veritabanı veya iki farklı SQLite veritabanları kullanmak isteyeceksiniz birim test için yapabilirsiniz Bir zaman gelecektir. Eğer bir tek kullandıysanız, uygulamanız için bazı ciddi değişiklikler yapmak zorunda kalacak. Ama eğer en başından düzenli nesneleri kullandıysanız, OOP avantaj Senin görevin verimli bir şekilde ve zamanında yapılması için atabilirsiniz.

Singleton değil çoğu programcı sonucu tembel olduğunu. Bir nesne (örneğin, bir veritabanı nesnesi) yöntemleri bir sürü geçmek istemez, her yöntemi örtülü bir parametre olarak kullanan bir tek onlar oluşturun. Ama, bu yaklaşım nedenlerle yukarıda ısırıkları.

Eğer yapabiliyorsanız hiç bir singleton kullanmak için deneyin. Başından beri iyi bir yaklaşım gibi görünüyor olsa da, genelde hep kötü tasarım ve sabit hat aşağı kodunu korumak için yol açar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005