Factory pattern vogue, "C-style" dillerinde (C / C ++, C #, Java) kodlayıcılar arasında "yeni" anahtar kelimenin kullanımının kötü olduğu ve her ne pahasına (veya en az merkezileşmiş). Bu da, Tek Sorumluluk İlkesinin (SOLID'in “S” si) ve ayrıca Bağımlılık İnversiyon İlkesinin (“D”) ultra katı bir yorumundan kaynaklanmaktadır. Basitçe ifade etmek gerekirse, SRP ideal olarak bir kod nesnesinin bir "değişim sebebi" ve bir tanesinin olması gerektiğini söyler; Bu "değişim nedeni", bu nesnenin temel amacı, kod tabanında "sorumluluğu" ve kodda değişiklik gerektiren başka bir şey, bu sınıf dosyasını açmayı gerektirmemelidir. DIP daha da basittir; Bir kod nesnesi asla başka bir somut nesneye bağlı olmamalıdır,
"Yeni" ve bir kamu kurucusu kullanarak, çağrı kodunu belirli bir somut sınıfın belirli bir yapım yöntemine bağlıyorsunuz. Kodunuz artık bir MyFooObject sınıfının var olduğunu bilmeli ve bir dize ve int alan bir yapıcıya sahip olmalıdır. Eğer bu kurucu daha fazla bilgiye ihtiyaç duyuyorsa, şu anda yazdığınız bilgiler de dahil olmak üzere bu bilgileri aktarmak için kurucunun tüm kullanımlarının güncellenmesi gerekir ve bu nedenle geçmek için geçerli bir şeyleri olması gerekir. onu almak için veya değiştirilerek (tüketen nesnelere daha fazla sorumluluk eklenmesi). Ayrıca, eğer MyFooObject, daha önce BetterFooObject tarafından kod tabanında değiştirilirse, eski sınıfın tüm kullanımlarının eskisinin yerine yeni nesneyi oluşturmak için değişmesi gerekir.
Bu nedenle, MyFooObject'in tüm tüketicileri, MyFooObject dahil sınıfları uygulama davranışını tanımlayan "IFooObject" e doğrudan bağlı olmalıdır. Şimdi, IFooObjects tüketicileri sadece bir IFooObject inşa edemezler (belirli bir somut sınıfın bir IFooObject olduğunu, ihtiyaç duymadıkları bir IFooObject olduğu bilgisine sahip olmadan), bu nedenle bunun yerine bir IFooObject-uygulayan sınıf veya yöntem örneği verilmelidir Dışarıdan, bizim durumumuzda genellikle bir Fabrika olarak bilinen durum için doğru IFooObject'in nasıl yaratılacağını bilmek sorumluluğuna sahip başka bir nesne tarafından.
Şimdi, işte teori gerçeği buluştuğu yer; bir nesne, her zaman her türlü değişikliğe asla kapatılamaz. İddiaya bakıldığında, IFooObject artık tüketicilerin talep ettiği arayüz veya IFooObjects uygulamaları değiştiğinde değişmesi gereken kod tabanındaki ek bir kod nesnesidir. Bu, nesnelerin bu soyutlama boyunca birbirleriyle etkileşimlerini değiştirme biçimiyle ilgili yeni bir karmaşıklık düzeyi ortaya koyuyor. Ayrıca, arayüzün kendisi yenisiyle değiştirilirse, tüketiciler hala değişmek zorunda kalacaklardır.
İyi bir kodlayıcı, YAGNI'yi ("İhtiyacınız Olmayacak") SOLID ile nasıl dengeleyeceğini, tasarımı analiz ederek ve belirli bir şekilde değişmesi muhtemel olan yerleri bularak ve onları daha hoşgörülü hale getirerek bilir. değişimin bu tip bu durumda çünkü "sen olan edeceksin gerek."