DI kapsayıcı kullanmıyor olsaydım, MVC3 uygulamamda EntityFramework kitaplığına başvurmak zorunda kalmazdım
Bir DI konteyneri kullanırken bile, MVC3 projenizin EF referansına başvurmasına izin vermeniz gerekmez, ancak bunu (örtük olarak) MVC3 projenizin içinde Kompozisyon Kökü (nesne grafiklerinizi oluşturduğunuz başlangıç yolu) uygulayarak yapmayı seçersiniz. Montajları kullanarak mimari sınırlarınızı koruma konusunda çok katı iseniz, sunum mantığınızı farklı bir projeye taşıyabilirsiniz.
MVC ile ilgili tüm mantığı (denetleyiciler, vb.) Başlangıç projesinden bir sınıf kitaplığına taşıdığınızda, bu sunum katmanı derlemesinin uygulamanın geri kalanından kopuk kalmasına izin verir. Web uygulaması projenizin kendisi, gerekli bir başlangıç mantığına sahip çok ince bir kabuk haline gelecektir. Web uygulaması projesi, diğer tüm derlemelere referans veren Kompozisyon Kökü olacaktır.
Sunum mantığını bir sınıf kitaplığına çıkarmak, MVC ile çalışırken işleri karmaşıklaştırabilir. Denetleyiciler başlangıç projesinde olmadığından (görünümler, resimler, css dosyaları muhtemelen başlangıç projesinde kalmalıdır), her şeyi bağlamak daha zor olacaktır. Bu muhtemelen yapılabilir ancak kurulması daha fazla zaman alacaktır.
Olumsuz yönleri nedeniyle genellikle yalnızca Web projesinde Kompozisyon Kökünü tutmanızı tavsiye ederim. Birçok geliştirici, MVC derlemelerinin DAL derlemesine bağlı olmasını istemez, ancak bu gerçekten bir sorun değildir. Montajların bir dağıtım yapısı olduğunu unutmayın ; kodun ayrı olarak dağıtılmasına izin vermek için kodu birden çok derlemeye bölersiniz. Öte yandan mimari katman, mantıksal bir eserdir. Aynı montajda birden çok katmana sahip olmak çok olası (ve yaygın).
Bu durumda, Kompozisyon Kökü (katman) ve Sunum Katmanı'nı aynı web uygulaması projesinde (dolayısıyla aynı montajda) elde edeceğiz. Ve bu derleme DAL'ı içeren derlemeye başvursa bile, Sunum Katmanı yine de Veri Erişim Katmanına başvurmaz . Bu büyük bir ayrımdır.
Elbette, bunu yaptığımızda, derleyicinin bu mimari kuralı derleme zamanında kontrol etme yeteneğini kaybediyoruz, ancak bu bir problem olmamalı. Çoğu mimari kural aslında derleyici tarafından kontrol edilemez ve her zaman sağduyu gibi bir şey vardır. Ekibinizde herhangi bir sağduyu yoksa, her zaman kod incelemelerini kullanabilirsiniz (her takımın IMO'nun her zaman btw yapması gerekir). Mimari kurallarınızı doğrulamanıza yardımcı olan NDepend (ticari olan) gibi bir araç da kullanabilirsiniz. NDepend'i derleme sürecinize entegre ettiğinizde, bu tür mimari kuralı ihlal eden biri kodu kontrol ettiğinde sizi uyarabilir.
Bağımlılık Enjeksiyonu, İlkeler, Uygulamalar, Kalıplar kitabımın 4. bölümünde Kompozisyon Kökünün nasıl çalıştığına dair daha ayrıntılı bir tartışma okuyabilirsiniz .