MVC Proje Yapısı 🌟

Derya Polat
Bursa Bilişim Topluluğu
5 min readJun 5, 2024

ASP.NET MVC projeleri, modern web uygulamaları geliştirmek için güçlü bir çerçeve sunar. Proje oluşturulduğunda, Solution Explorer’da belirli bir yapı ortaya çıkar. Bu yapı, proje dosyalarını ve klasörlerini organize eder ve projenin yapısını anlamak için kritik bir rol oynar.

MVC projesi oluşturduğumuzda Solution Explorer’da yukarıdaki yapıyı görüyoruz. Bu yapıların görevleri:

🌟 Connected Services: Bir ASP.NET MVC projesinde dış hizmetlerle etkileşim kurmak ve bunları projeye entegre etmek için kullanılan bir araçtır. Bu bölüm, bulut tabanlı hizmetler, dış API’lar veya veritabanları gibi harici kaynaklara bağlanmayı sağlayarak, geliştiricilere projelerinde dış kaynakları kullanma ve entegre etme imkanı sunar. Örnek olarak Azure bağlantısının kurulması veya SQL Server bağlanması verilebilir.

Connected Services Ekranı

🔘 Connected Services-> Add a service dependency denildiğinde açılan pencereden istenen servis eklenebilir.

Add Service Dependency Ekranı

🌟 Properties: Projenin temel ayarları ve düzenlemeleri yapılır. Properties birden çok alt sekmeden oluşmaktadır, bunlardan bazıları:

🔷Application: Target framework kısmından projenin derlendiği .NET sürümü belirlenir. Output type projenin nasıl derleneceği ve çıktı türünün ne olacağını seçildiği kısımdır. Assembly Information kısmında projenin sahiplik durumu ile ilgili ayarlar bulunur, projenin telif hakları, açıklaması, geliştiren firma vs gibi. Resources kısmında ise projeye icon eklenebilir.

🔷Build: Projenin derleme ayarlarının yapılandırıldığı kısımdır.

🔷Web: Projenin debug ayarlarının, başlangıç sayfasının ayarlandığı kısımdır.

Properties-> Application Ekranı
Target Framework Listesi

🌟 References: Proje referanslarının yani projeye yüklenen paketlerin, farklı projelerden verilen referansların listelendiği kısımdır. Örneğin projede kullanmak üzere proje üzerine sağ tıklayıp -> manage nuget packages-> EntityFramework-> install dediniz, references kısmında Enetityframework referanslarınız arasına eklenmiş olur. Çok katmanlı bir proje oluştururken EntityLayer isminde bir class library tanımlayıp modellerinizi orada tanımladınız bu durumda mvc projesi->add reference->project->EntityLayer dediğinizde references kısmında EntityLayer görünür ve siz modelinize erişebilirsiniz.

🌟 App_Data: Genellikle veri yönetimi işlemleri için kullanılır. Örneğin, uygulamanın yerel bir veritabanı dosyasını (.mdf) veya diğer veri dosyalarını barındırmak, XML veya JSON veri dosyalarını saklamak veya log dosyalarını depolamak için kullanılabilir. Bu klasör, uygulamanın veri tabanı dosyalarını yönetmek, yapılandırma dosyalarını saklamak ve loglama gibi veri işlemlerini düzenlemek için bir merkezi konum sağlar.

🌟 App_Start: Uygulamanın başlangıcında çalıştırılacak kodları, yapılandırmaları ve ayarları içeren bir klasördür. Bu klasör, genellikle Route ayarları, Filter konfigürasyonu, Bundle ayarları, Auth yapılandırması ve Dependency Injection ayarlarını içerir. RouteConfig.cs dosyasında URL yönlendirmeleri tanımlanırken, FilterConfig.cs dosyasında MVC filtreleri (yetkilendirme, aksiyon filteleri vs) ayarlanır. BundleConfig.cs dosyasında CSS ve JavaScript dosyalarının birleştirilmesi ve sıkıştırılması yapılandırılırken, AuthConfig.cs veya Startup.Auth.cs dosyalarında kimlik doğrulama ve yetkilendirme ayarları belirlenir.

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MediumFirstProject
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}

🔘 Default olarak projede bulunan App_Start-> RouteConfig class’ı içerisindeki RegisterRoute metodu yukarıda verilen koddaki gibidir. Proje çalıştırıldığında hangi controller’ın hangi view’ının ilk olarak açılacağı, tarayıcı url’inde naısl görüneceği bilgilerini içerir. RegisterRoutes metodu isteğe göre revize edilebilir, eklemeler yapılabilir.

🌟 Content: Genellikle css dosyalarının bulunduğu alandır. Çoğunlukla yüklenen bootstrap dosyalarının bu klasör içerisinde tutulur.

Bootstrap Dosyalarının Bulunduğu Content Klasörü

🌟 Controllers: Model-View-Conroller yapısının Controller dosyaları bu klasörde tutulur. Kullanıcı etkileşimini yöneten projenin iş mantığını düzenleyen kodlar bu klasör içerisinde yer alan Controller dosyalarında bulunur.

🔘 Controller ekleme işlemi; Controller -> Add->Controller ->(isimlendirme)->save şeklinde yapılır.

🌟 Models: Proje içerisinde kullanılacak class’ların tutulduğu kısımdır. Model, uygulamanın veri tabanı işlemlerini gerçekleştirir, veri işlemlerini yönetir ve iş mantığını uygular. Genellikle, veri tabanı tablolarıyla eşleşen sınıflardan oluşur ve bu sınıfların özellikleri, veri tabanındaki sütunlarla uyumlu olur.

🌟 Scripts: Javascript dosyalarının bulunduğu dizindir.

Scripts Klasörü

🌟 Views: projenin farklı sayfalarını ve sayfa parçalarını içerir. Her bir View, kullanıcıya gösterilen bir HTML sayfasını temsil eder. Views klasörü genellikle Controller’lar tarafından çağrılan eylemlere (actions) karşılık gelen dosyaları içerir. Her bir Controller için bir View klasörü altında bir alt klasör bulunabilir. Örneğin, UserController için bir User alt klasörü olabilir ve bu klasörde UserController tarafından kullanılan view dosyaları bulunabilir.

Views Klasörü

🔘 Views-> Shared içerisinde Layout dosyaları bulunur. Layout cshtml dosyaları proje içerisinde farklı sayfalara gidildikçe değişmeyen yapıları (navbar, footer vs) oluşturur. Altından bulunan Test klasörü oluşturulan Test Controller’ının içerdiği view’ları tutar.

🌟favicon.ico: Oluşturacak olduğunuz web sitesinin tarayıcı sekmesinde görünmesini istediğiniz ikonu buradan tasarlayabilirsiniz.

🌟Global.asax: Bu dosya, uygulamanın çalışma süresi boyunca çeşitli olayları ele alarak özelleştirilmiş davranışları sağlar. Örneğin, uygulamanın başlangıcında veya sonunda özel ayarları yapılandırmak, HTTP istekleri geldiğinde belirli kontrolleri yapmak veya oturum bilgilerini yönetmek gibi işlevleri bu dosya içinde tanımlayabiliriz. Bu sayede, uygulamanın genel yapısını ve davranışlarını kontrol etmek ve özelleştirmek için Global.asax dosyası kullanılır.

🌟 Packages.config: Kullanılan nuget paketlerinin ve bağımlılıklarının listelendiği bir dosyadır. Bu dosya, proje içindeki nuget paketlerinin sürümlerini ve yüklenmiş olduğu kütüphaneleri tutar. Her bir paket, proje geliştiricilerinin projeye kolayca entegre edebileceği harici kütüphaneleri temsil eder. Bu kütüphaneler, projenin ihtiyaç duyduğu işlevselliği sağlamak veya geliştirmek için kullanılabilir. Örneğin, bir projede veritabanı işlemleri için Entity Framework veya kullanıcı oturumlarını yönetmek için ASP.NET Identity gibi nuget paketleri kullanılabilir.

References Klasörü

🌟 Web.config: Projenin yapılandırma ayarlarını içerir ve genellikle birçok önemli işlevi yerine getirir. Örneğin, bir e-ticaret sitesi geliştiriyorsanız, Web.config dosyası, sitenin genel yapılandırma ayarlarını içerir. Bu ayarlar arasında, sitenin anahtarları ve değerleri (örneğin, site başlığı veya anahtar kelimeleri), site tarafından kullanılan veritabanı bağlantı dizesi, güvenlik ayarları (örneğin, kimlik doğrulama veya yetkilendirme politikaları) ve HTTP işleyicileri veya modülleri gibi özelleştirilmiş HTTP işleme bileşenlerinin yapılandırması bulunabilir. Bu dosya, uygulamanın nasıl çalıştığını ve davrandığını büyük ölçüde belirler.

Bu yazıyı okuduğunuz için teşekkür ederim, umarım bilgilendirici olmuştur. Daha fazla içerikten haberdar olmak için Medium hesabımı takip edebilir veya benimle iletişime geçebilirsiniz. Bir sonraki yazıda görüşmek üzere!

--

--