WebSite ile Web Application Arasındaki Fark Nedir?

0 dakikada yazıldı

75839 defa okundu

Düzenle

Mvc website ile application arasındaki fark nedir?

Geçenlerden twitter üzerinden gelen sorulardan biriydi bu malum :) Twitter'dan cevaplamak için uzun bir konu olmanın yanı sıra bloga yazarsam daha faydalı olur diye düşündüm. O zaman gelin şu olaya bir göz atalım. Neymiş bakalım "Web Application" ile "Web Site" arasındaki fark.

Aslına bakarsanız ilk olarak aklıma gelen cevap "proje şablonu farkından başka bir şey değil" şeklinde oldu. Ama sonrasında tabi ki başka soru işaretleri de söz konusu olabilir. Yani, anladık proje şablonu farklılığı :) ama nedir bu farklılıklar? Veya neden var bu farklılıkar? Konuya sadece MVC gözü ile bakmayacağım bu arada çünkü soru aslında doğrudan MVC ile alakalı değil. Web Application ve Web Site arasındaki farklılık MVC seçmeseniz ve WebForms ile gitseniz de karşınıza çıkacaktır.

Source code nerede olsun?

İlk olarak bu iki şablon konsepti arasında bir compiler davranış farklılığı var. Zaten her şey de buradan çıkıyor :) Eğer web site ile devam ederseniz compiler sadece validasyon amaçlı projenizi compile eder ve sunucuya elinizdeki tüm source code'u atmanız gerekeir. Web project tarafında ise deployment öncesinde compiler tüm dosyaları bir DLL'e dönüştürür ve bu şekilde deployment yapılır. Bu iki yaklaşım arasında ciddi farklılıklar var özünde. Birinde sunucudaki IL kodunuz Runtime tarafından çalıştırılırken diğerinde doğrudan source code'unuz Runtime tarafından compiler'lara sunucuda gönderilerek (Dynamic Compilation) çalıştırılır. Bunun uygulamanın ilk açılışında küçük bir performans farkı yaratacağı malum ama tabi ki bunu önemsemeyebilirsiniz de. Esas büyük farklılık aslında yazılım geliştirme süreçlerinizin tanımı ile alakalı. Eğer "sunucuya bağlanıp orada kod editlediğim oluyor" diyorsanız işte o zaman Web Site ile devam etmeniz gerek. Malum Web Application'da source code sunucuda bulunmuyor.

Yukarıda bahsettiğimiz karar aslında çok kritik bir karar. Olaya sadece kendi açınızdan bakmayın. Eğer WebSite ile devam ederseniz, yani sunucuya source code'ları atarsanız sunucuya erişimi olan herkesin o kodları düzenleyebilmesine de olanak vermiş olursunuz. Bu sizin şartlarınıza göre iyi veya kötü bir durum olabilir. Kararı verecek olan sizsiniz. Bir diğer örnek de "ben sadece bir dosyayı değiştirip sunucya atmak istiyordum" senaryosu :) Web Site'da bunu yapabilirsiniz çünkü compile işlemi sunucuda gerçekleşir ama WebApplication'da tüm projeyi tekrar compile edip atmak durumundasınız. Tabi projenizi farklı assemblylere compile olacak şekilde bölüştürebilirsiniz ama o da apayrı uzun bir hikaye.

Hem CS hem VB aynı projede!

Ben pek böyle bir senaryo görmedim :) ama olur ya aynı projede bir code-behind dosyası VB diğer CS ile yazılır :) işte bunu ancak WebSite'da yapabilirsiniz. Aslında tüm bunların nedeni yine compile işleminin nerede nasıl yapıldığı ile alakalı. Zaten WebProject'te proje dosyasına göre compiler seçilir ve bu da kafadan farklı dil kullanımını engeller. Tabi ki harici kütüphaneler ekleyip solution içerisinde farklı diller kullanabilirsiniz amma illa ki aynı web site içerisinde olacak diyorsanız WebSite kullanmalısınız. WebSite'lar için her dosya için ayrı ayrı request üzerine dosya uzantısına göre compiler ile eşleştirilebilir.

Kullandığınız Microsoft dışı araçlardan ne haber?

Microsoft ürünleri dışında bir şeyler kullanıyorsanız, örneğin NUnit, Cruise Control.NET hatta klasik bir TFS bile Web Site projelerinde Continious Integration'da canınızı sıkabilir. Bugünlerde TFSLive ile işler ciddi kolaylaşmış olsa da WebProject tarafında CI implementasyonlarında çok daha rahat edersiniz. WebProject'ler MSBuild ile çalışır ve MSBuild entegrasyonu olan her türlü araçta çok daha rahat edersiniz. Zaten MSBuild normalde WebSite'da çalışmıyor :) Build edip deploy etmiyoruz malum ama zorlayıp etrafından dönüp çalıştırabilirsiniz. Zor işler bu işler. Ayrıca gerek yok. Eğer gerekiyorsa WebApplication kullanın zaten. :) CI derdiniz yoksa bu problemleri yaşamanız pek de olası değil. Ama örneğin hatırlıyorum.. Azure SDK ilk zamanlarda Deployment Package yaratırken bile Web Sites projeleri ile seksen takla atmamız gerekiyordu (eskiden).

Edit & Continue sadece WebApplications'da var!

Sanırım başlık kendini açıklıyor zaten değil mi? Eğer Edit&Continue ile debugging esnasından özgürce takılmayı seviyorsanız zaten WebSites kullanmıyorsunuz demektir :)

Başka başka....

Tabi ki ek olarak Visual Studio'nın şablona göre içeri attığı farklı dosyalar ve klasör yapıları da var ama onlar pek de kritik değil. Sanırım hepsi bu kadar :) Atladıklarım varsa yorum olarak beklerim ;)

Görüşmek üzere.