Bir tasarım üzerinde çalışıyorum, ancak bir barikatı vurmaya devam ediyorum. Temelde bir XML şema ayrıştırma (DOM DOM) tarafından oluşturulan karmaşık bir düğüm ağacının sahibi olan belirli bir sınıf (ModelDef) var. İyi tasarım ilkelerini (SOLID) takip etmek ve ortaya çıkan sistemin kolayca test edilebilir olmasını sağlamak istiyorum. Bağımlılıkları ModelDef'in yapıcısına iletmek için DI kullanma niyetine sahibim.
Bununla birlikte uğraştığım şey, düğüm ağacının oluşturulması. Bu ağaç tamamen bağımsız bir şekilde test edilmesi gerekmeyen basit “değer” nesnelerden oluşacak. (Bununla birlikte, bu nesnelerin oluşturulmasına yardımcı olmak için yine bir Soyut Fabrikayı ModelDef'e geçirebilirim.)
Ancak bir yapıcının herhangi bir gerçek iş yapmaması gerektiğini okudum (ör. Flaw: Yapıcı Gerçek İş yapıyor ). "Gerçek iş", birinin daha sonra test etmek için saplamak isteyebileceği ağır tartıma bağımlı nesneler oluşturmak anlamına gelirse, bu benim için mükemmel bir anlam ifade eder. (Bunlar DI üzerinden iletilmelidir.)
Ancak, bu düğüm ağacı gibi hafif değer nesnelerine ne dersiniz? Ağaç bir yerlerde yaratılmalı, değil mi? Neden ModelDef'in yapıcısı aracılığıyla değil (bir buildNodeTree () yöntemi kullanarak)?
Düğüm ağacını ModelDef'in dışında oluşturmak ve bunu iletmek istemiyorum (yapıcı DI aracılığıyla), çünkü şema ayrıştırılarak düğüm ağacının oluşturulması, kapsamlı bir şekilde test edilmesi gereken önemli miktarda karmaşık kod - kod gerektiriyor . Ben onu "yapıştırıcı" kodla (istemeden önemsiz ve muhtemelen doğrudan test edilmeyecek) koduna vermek istemiyorum.
Düğüm ağacını oluşturmak için ayrı bir "oluşturucu" nesnesine kod eklemeyi düşündüm, ancak "oluşturucu" olarak adlandırmakta tereddüt ettim, çünkü Oluşturucu Deseni ile gerçekten eşleşmiyor (teleskopların kaldırılmasıyla daha fazla ilgileniyor gibi görünüyor) kurucular). Ama farklı bir şey (ör. NodeTreeConstructor) olarak adlandırsam bile, ModelDef yapıcısının düğüm ağacını inşa etmesini önlemek için hala bir kesmek gibi hissediyor. Bir yere inşa edilmesi gerekiyor; neden kendine ait olacak nesnede değil?