Bu yüzden farklı sınıflardan nesneler yaratan bir fabrikam var. Olası sınıfların tümü soyut bir atadan türetilir. Fabrikada bir yapılandırma dosyası (JSON sözdizimi) vardır ve kullanıcının yapılandırmasına bağlı olarak hangi sınıfın oluşturulacağına karar verilir.
Bunu başarmak için, fabrika JSON ayrıştırma işlemi için boost :: property_tree kullanır. Ptree'de yürür ve hangi somut nesneyi yaratacağına karar verir.
Ancak, ürün nesnelerinin birçok alanı (öznitelikleri) vardır. Somut sınıfa bağlı olarak, nesnenin yaklaşık 5-10 niteliği vardır, gelecekte belki daha da fazladır.
Bu yüzden nesnelerin kurucusunun nasıl olması gerektiğinden emin değilim. İki çözüm düşünebilirim:
1) Ürünün yapıcısı her özelliği bir parametre olarak bekler, böylece yapıcı 10'dan fazla parametre ile sonuçlanır. Bu çirkin olacak ve uzun, okunamayan kod satırlarına yol açacaktır. Bununla birlikte, avantaj, fabrikanın JSON'u ayrıştırabilmesi ve yapıcıyı doğru parametrelerle çağırabilmesidir. Ürün sınıfının, JSON yapılandırması nedeniyle oluşturulduğunu bilmesine gerek yoktur. İlgili JSON veya yapılandırma olduğunu bilmek gerekmez.
2) Ürünün yapıcısı yalnızca bir bağımsız değişken, property_tree nesnesi bekler. Sonra gerekli bilgileri ayrıştırabilir. Konfigürasyondaki am bilgisi eksik veya sınırların dışındaysa, her ürün sınıfı düzgün tepki verebilir. Fabrikanın, çeşitli ürünler için hangi argümanlara ihtiyaç duyduğunu bilmesine gerek yoktur. Fabrikanın ayrıca yanlış yapılandırma durumunda nasıl tepki vereceğini bilmesine gerek yoktur. Ve yapıcı arayüzü birleşik ve küçük. Ancak, bir dezavantaj olarak, ürünün gerekli bilgileri JSON'dan çıkarması gerekir, bu nedenle nasıl yapılandırıldığını bilir.
Çözelti tercih etme eğilimim 2). Ancak, bunun iyi bir fabrika modeli olup olmadığından emin değilim. Ürünün JSON yapılandırmasıyla oluşturulduğunu bildirmek bir şekilde yanlış geliyor. Öte yandan, yeni ürünler çok basit bir şekilde tanıtılabilir.
Bununla ilgili herhangi bir görüşünüz var mı?