SORU
27 Mayıs 2010, PERŞEMBE


Yeniden Düzenleme Singleton Aşırı

Bugün önemli bir şey oldu, ve her şeyi yanlış yaptığımı. Bazı tarihi: gerçekten statik yöntemler bir koleksiyon, C tamamen usule ilişkin bir karışıklık oldu C bir miras kaldı# uygulama# kodu. En iyi ben zamanda üniversite öncesi OOP çok bilgiye getirerek bunu biliyordu ben refactored. Uzun lafın kısası, kod varlıkları birçok Tekiz olduğu ortaya çıktı.

Bugün yazılım geri kalanı maç için aynı Singleton deseni takip eder, her hangi 3 yeni sınıflar, ihtiyacım olduğunu fark ettim. Eğer bu kaygan yamaç aşağı yuvarlanan devam edersem, benim uygulama sonunda her sınıf gerçekten statik yöntemler orijinal gruptan hiçbir mantıksal olarak farklı olacak olan Tek olacak.

Bu yeniden düşünmek için yardıma ihtiyacım var. Bağımlılık Enjeksiyon biliyorum, ve genellikle Tek laneti kullanmak için strateji olacaktır. Ancak, bazı özel sorular için yeniden düzenleme ve tüm ilgili en iyi uygulamaları ile ilgili.

  1. Nasıl kabul edilebilir statik değişkenleri yapılandırma bilgilerini saklamak mı? Statik kullanarak beyin bir blok var, ve Profesör statik kötü olduğunu söyledi üniversitede erken OO bir sınıf yüzünden olduğunu düşünüyorum. Ama, bu sınıf her zaman yeniden başlatmanız gerekiyor ben bu erişim? Donanım erişirken, adresleri ve gerekli değişkenler için statik bir işaretçi bırakmak için tamam mı, ya da sürekli Open() Close() işlemleri gerçekleştirmek gerekir?

  2. Şu anda tek bir yöntem denetleyicisi olarak hareket var. Özellikle, ben sürekli çeşitli harici cihazlar (donanım sürücüleri) veriler için anket. Bu tür bir denetleyici gitmek için yol olmalıdır, ya da programın başlangıçta her araç için ayrı bir iş parçacığı spawn gerekir? İkincisi ise, nasıl bu nesne yönelimli yapabilirim? Sınıflar InstrumentAListener InstrumentBListener adlı oluşturmalıyım? Yoksa standart bir şekilde bu yaklaşım?

  3. Daha iyi bir yol genel yapılandırma yapmak var mı? Şu anda sadece Configuration.Instance.Foo kod boyunca bolca serpilir. Hemen hemen her sınıf kullanır, belki bir Singleton olarak tutmak mantıklı. Herhangi bir düşünce?

  4. Derslerim çok SerialPortWriter veya stream bu veri bekliyorsun gereken DataFileWriter, gibi şeyler vardır. Aktif tüm zaman olduğundan, nasıl olaylar veri geldiğinde oluşturulan dinlemek için bu yapmalımıyım?

Diğer kaynaklar, kitaplar ya da Tekiz ve diğer desen aşırı almak hakkında yorum yararlı olacaktır.

CEVAP
27 Mayıs 2010, PERŞEMBE


Pekala, işte bu soru saldıran şansım var:

(1) Statik

Sahip olabilir static Sorun, farklı şeyler ifade eder .NET ve de ki, C . Statik temelde sınıfın kendisi tarafından erişilebilir olduğu anlamına geliyor. Olduğu içinkabul edilebilirlikkimliği olmayan örnek bir sınıf belirli işlemleri yapmak için kullanmak istiyorum bir şey daha olduğunu söylüyor. Ya da sadece Math.Abs(...) gibi genel şeyler. Küresel bir yapılandırma için ne kullanmalıyım muhtemelen geçerli/etkin yapılandırma tutmak için statik olarak erişilen bir özellik. Belki yükleme için bazı statik sınıflar/kaydetme config ayarı, ancak bu yapılandırma olmalıdır daNesnemanipüle, vb etrafında geçirilebilir. genel sınıf MyConfiguration { dize DefaultConfigPath = "./halkla inş"; . config.xml

  protected static MyConfiguration _current;
  public static MyConfiguration Current
  {
    get
    {
      if (_current == null)
        Load(DefaultConfigPath);
      return _current;
    }
  }

  public static MyConfiguration Load(string path)
  {
    // Do your loading here
    _current = loadedConfig;
    return loadedConfig; 
  }

  // Static save function

  //*********** Non-Static Members *********//

  public string MyVariable { get; set; }
  // etc..
}

(2) Kontrolör/Donanım

Muhtemelen reaktif bir yaklaşım içine bakmak gerekir, IObserver<> IObservable<>, Reactive Framework (Rx) bir parçası.

Başka bir yaklaşım ise havuz donanım bir sürü varsa, çok sayıda iş parçacığı alabilirsiniz olarak yoklama görevleri zamanlamak için bir Havuzu kullanıyor. Her türlü kullanmadan önce emin olunİş parçacığıbunun hakkında çok şey öğrenmek için. Çok kolay bile farkında olmayabilir hata yapmak. This Book mükemmel bir kaynaktır ve size çok öğretecek.

Ya da muhtemelen bilgi toplama sorumlu olan donanım yönetimi hizmetleri (adı gerçekten) inşa gerektiği şekilde hizmet (aslında model-desen) hakkında. Oradan Merkez kumandanız onları denetleyici program mantığı ve servis donanım mantığı tutmak verilere erişmek için kullanabilirsiniz.

(3) Genel Yapılandırma

Ben dokunmadım bu konuda noktası #1 ama genellikle bu Nereye gidiyoruz, kendini yazarak çok fazla zaman Çek oradan varsayarak .Instance bir nesne.

MyConfiguration cfg = MyConfiguration.Current
cfg.Foo // etc...

(4) veri İçin Dinleme

Yine reaktif çerçevesinde sana yardımcı olabilir, ya da gelen veri için tetikler kullanan event-driven model bir yapı. Bu veri gelene kadar bir iş parçacığı engelleme değil emin olun. Uygulama karmaşıklığını büyük ölçüde azaltır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • macpulenta

    macpulenta

    9 EYLÜL 2006
  • MADFINGER Games a.s.

    MADFINGER Ga

    21 NİSAN 2009