Yapılandırma ayarları problemine hangi tasarım modelleri uygulanabilir?


83

Büyük ve karmaşık yazılım ürünlerinde, yapılandırılabilir ayarları yönetmek büyük bir sorun haline gelir. Soruna gördüğüm iki yaklaşım:

  • sistemdeki her bileşenin kendi yapılandırmasını yapılandırma dosyalarından veya kayıt defteri ayarlarından yüklemesini sağlayın.
  • tüm yapılandırılabilir sistem ayarlarını yükleyen ve her bileşenin ayarları için ayar yükleyiciyi sorgulamasını sağlayan bir ayar yükleyici sınıfına sahip olun.

Bu yaklaşımların ikisi de bana yanlış geliyor.

Sorunu basitleştirmek için kullanılabilecek herhangi bir tasarım modeli var mı? Belki bağımlılık enjeksiyon tekniğinden yararlanacak bir şey.


4
Neden 2. seçeneğin yanlış olduğunu düşünüyorsunuz?
ChaosPandion

2
Genellikle tekli olarak uygulanır, ancak uygulamanın başka yolları da vardır.
Daniel Bingham

Yanıtlar:


47

Sorguyu ayarlamak, yüklemek ve kaydetmek için bir arayüz oluşturmayı tercih ediyorum. Bağımlılık enjeksiyonu kullanarak, bunu gerektiren her bileşene bunu enjekte edebilirim.

Bu, konfigürasyon stratejisini değiştirme konusunda esneklik sağlar ve her şeyin çalışacağı ortak bir temel sağlar. Bunu tek bir global "ayar yükleyiciye" (sizin 2. seçeneğiniz) tercih ediyorum, özellikle de kesinlikle ihtiyacım olursa tek bir bileşen için yapılandırma mekanizmasını geçersiz kılabileceğim için.


7
merhaba, biraz örnek paylaşırsanız iyi olur :)
issamux

20

Şu anda, konfigürasyonun, konfigürasyon anahtarlarının değerlerle bir haritasını tutan bir global tek nesne tarafından yönetildiği bir sistem üzerinde çalışıyorum. Genel olarak, keşke bu şekilde yapılmasaydı, çünkü sistemde eşzamanlılık darboğazlarına neden olabilir ve birim testi için özensizdir, vb.

Bence Reed Copsey buna hakkına sahip (ona oy verdim), ancak Martin Fowler'in bağımlılık enjeksiyonu hakkındaki harika makalesini kesinlikle okumanızı tavsiye ederim:

http://martinfowler.com/articles/injection.html

Küçük bir ek ... herhangi bir sahte nesne türü birim testi yapmak istiyorsanız, bağımlılık enjeksiyonu kesinlikle gitmenin yoludur.


Görünüşe göre dekoratör ihtiyaçlarınızı karşılıyor. Sınıfları kendi yöntemleriyle serileştirilebilir hale getirebilecek Serileştirilebilir bir dekoratör oluşturabilirsiniz. Strateji, tüm nesnelerin kendi serileştirme stratejisine sahip olmasını sağlamak için kullanılabilir. Serileştirilmesi gerekmeyen nesneler yok sayma stratejisini kullanabilir. Yalnızca alanlarını OnlyFields stratejisini ve benzerlerini serileştirmesi gerekenler. Sen ll be flexible with adding new things to your config. Sure as all approaches this have itartıları ve eksileri bu.
Yaroslav Yakovlev

4

Buna ne dersin. Tek bir yöntemle yapılandırılabilir (yapılandırma) bir arabirim tanımlarsınız. Yapılandırma bağımsız değişkeni, yapılandırma parametrelerinin adlarını değerleri ile ilişkilendiren bir hashtable'dır.

Kök nesneler, istedikleri şekilde bir yapılandırma hashtable'ı oluşturabilir (örn: bir yapılandırma dosyasından okuyarak). Bu hashtable, kök nesne iselft için yapılandırma parametrelerini ve ayrıca bileşenlerinden, alt bileşenlerinden, alt bileşenlerinden (vb.) Birinin kullanabileceği herhangi bir parametreyi içerebilir.

Kök nesne daha sonra yapılandırılabilir tüm bileşenlerinde configure (yapılandırma) işlevini çağırır.


0

Yapılandırma yükleyiciyi tanımlayan bir arabirimin birden çok uygulamasını oluşturabilirsiniz. Temel olarak bir temel arayüzü configLoader olarak tanımlayabileceğiniz strateji modeli ve ardından FileSystemLoader, ClasspathLoader, EnvVariablesLoader vb. Gibi farklı uygulamaları tanımlayabilirsiniz. Ayrıntılar bu bağlantıda

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.