Giriş
ASP.NET Core MVC, büyük ve kompleks web uygulamaları geliştirmek için güçlü bir platformdur. Uygulamanın yapısını yönetmek ve modüler bir şekilde geliştirmek için Area yapısı, projelerde modülerliği sağlamak ve daha iyi bir yönlendirme yönetimi elde etmek amacıyla kullanılan önemli bir özelliktir. Bu makalede, Area yapısının nasıl kullanılacağı ve Area yapısının yönlendirme ve organizasyon üzerindeki etkileri anlatılacaktır. Ayrıca verilen örnekle, Area yapısının nasıl düzenlenebileceğine dair somut bir bakış açısı sunulacaktır.
Area Yapısının Temel Özellikleri
ASP.NET Core MVC'de Area yapısı, uygulamanın farklı modüllerini (veya alanlarını) birbirinden ayırmak için kullanılır. Bu yapı, özellikle büyük projelerde çok önemli bir yer tutar çünkü her bir modül kendi içerisinde bağımsız olarak yönetilebilir. Bir Area, uygulamanın belirli bir işlevsel alanını temsil eder. Her Area, kendi Controllers, Views ve Models klasörlerine sahip olabilir.
Örnek olarak şu yapıyı ele alalım:
Area/Web/Controllers/Uyg
Area/Web/Views/Index
Area/Grafik/Controllers/Uyg
Area/Grafik/Views/Index
Bu yapıda Area, projede belirli bir modülün tüm bileşenlerini organize etmek için kullanılıyor.
1. Area/Web/Controllers/Uyg
Bu klasör, Web adlı modülün kontrolcüleri için ayrılmıştır. Bu kontrolcüler, gelen istekleri karşılamak ve uygun View'ları döndürmekle sorumludur. Her Area, kendi kontrolcüleriyle bağımsız olarak çalışır ve farklı yönlendirmelere hizmet eder.
Örneğin, UygController sınıfı şunları içerebilir:
namespace Web.Areas.Uyg.Controllers
{
[Area("Web")]
public class UygController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
2. Area/Web/Views/Index
Bu klasör, Uyg modülüne ait Views’ı içerir. Her bir Area, modüllerin görsel bileşenlerini barındıran kendi Views klasörüne sahiptir. Örneğin, UygController'ın Index metoduna karşılık gelen Index.cshtml dosyası burada yer alır.
@{
ViewData["Title"] = "Uyg Modülü Ana Sayfa";
}
<h2>Uyg Modülü Ana Sayfa</h2>
3. Area/Grafik/Controllers/Uyg
Grafik modülü için aynı şekilde bir kontrolcü oluşturulmuş. Bu, Grafik alanında yapılacak işlemler için sorumlu olacak ve farklı yönlendirmeleri yönetecektir.
namespace Web.Areas.Grafik.Controllers
{
[Area("Grafik")]
public class GrafikController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
4. Area/Grafik/Views/Index
GrafikController'ın Index metoduna karşılık gelen Index.cshtml dosyası, yine Grafik alanına özgü görsel bileşenleri içerecektir.
@{
ViewData["Title"] = "Grafik Modülü Ana Sayfa";
}
<h2>Grafik Modülü Ana Sayfa</h2>
Yönlendirme ve Route Yapısı
ASP.NET Core MVC'de, Area yapıları için yönlendirme işlemleri de oldukça önemlidir. Her bir Area, kendi yönlendirme düzenini izler. Route yapılandırmasında, yönlendirme işlemleri Area parametresiyle yapılır. Örneğin, Uyg alanındaki Index metoduna yönlendirmek için şu şekilde bir rota yapılandırması yapılabilir:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
Bu yapı, her Area için farklı Controller ve Action metodlarına yönlendirme yapılmasını sağlar. Eğer Uyg alanındaki Index sayfasına yönlendirmek isterseniz, şu URL'yi kullanırsınız:
/Web/Uyg/Index
Benzer şekilde, Grafik alanındaki Index metoduna yönlendirme yapılabilir:
/Grafik/Uyg/Index
Program.cs dosyasında şu ayarları yapalım.
app.UseRouting();
// Area'lar için routing ayarı
app.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
Area Yapısının Avantajları
Modülerlik: Area yapısı, her modülü bağımsız bir şekilde yönetmeyi sağlar. Her alan, kendi kontrolcülerine, görünümlerine ve modellerine sahip olabilir.
Yönlendirme Kolaylığı: Uygulamanın farklı bölümleri arasında yönlendirme yapmak daha düzenli ve kolay hale gelir.
Büyük Projelerde Yönetim Kolaylığı: Özellikle büyük projelerde, farklı modüllerin birbirinden bağımsız çalışması sayesinde geliştirme süreci daha verimli hale gelir.
Sonuç
Area yapısı, Core MVC uygulamalarında modüler bir tasarım oluşturmak için güçlü bir araçtır. Özellikle büyük ve karmaşık uygulamalarda, her bir modülün kendi Controller, View ve Model bileşenlerine sahip olması, uygulamanın bakımını ve yönetimini oldukça kolaylaştırır. Bu yapıyı kullanarak, projenin her bir alanını bağımsız olarak geliştirebilir ve yönlendirme işlemlerini düzenli bir şekilde yönetebilirsiniz.
Bununla ilgili örnekler verelim.
1. Area/Yonetim/Controllers/PanelController
namespace Web.Areas.Yonetim.Controllers
{
[Area("Yonetim")]
public class PanelController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Yonetim alanı, admin panelini temsil eder.
2. Area/Yonetim/Views/Panel/Index.cshtml
@{
ViewData["Title"] = "Yönetim Paneli";
}
<h2>Yönetim Paneli</h2>
3. Area/Blog/Controllers/BlogController
namespace Web.Areas.Blog.Controllers
{
[Area("Blog")]
public class BlogController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Blog alanı, blog içeriğini yönetmek için kullanılır.
4. Area/Blog/Views/Blog/Index.cshtml
@{
ViewData["Title"] = "Blog Ana Sayfa";
}
<h2>Blog Ana Sayfa</h2>
5. Area/E-ticaret/Controllers/SatisController
namespace Web.Areas.Eticaret.Controllers
{
[Area("Eticaret")]
public class SatisController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
E-ticaret alanı, satış işlemleri ve ürün yönetimi için kullanılır.
6. Area/E-ticaret/Views/Satis/Index.cshtml
@{
ViewData["Title"] = "E-ticaret Ana Sayfa";
}
<h2>E-ticaret Ana Sayfa</h2>
7. Area/Destek/Controllers/TeknikDestekController
namespace Web.Areas.Destek.Controllers
{
[Area("Destek")]
public class TeknikDestekController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Destek alanı, müşteri destek ve teknik yardım için kullanılır.
8. Area/Destek/Views/TeknikDestek/Index.cshtml
@{
ViewData["Title"] = "Teknik Destek Sayfası";
}
<h2>Teknik Destek Sayfası</h2>
9. Area/Raporlama/Controllers/RaporController
namespace Web.Areas.Raporlama.Controllers
{
[Area("Raporlama")]
public class RaporController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Raporlama alanı, sistem raporlarının yönetildiği yerdir.
10. Area/Raporlama/Views/Rapor/Index.cshtml
@{
ViewData["Title"] = "Raporlar";
}
<h2>Raporlar</h2>
11. Area/Kullanici/Controllers/ProfilController
namespace Web.Areas.Kullanici.Controllers
{
[Area("Kullanici")]
public class ProfilController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Kullanici alanı, kullanıcıların profil bilgilerini düzenleyebileceği alanı temsil eder.
12. Area/Kullanici/Views/Profil/Index.cshtml
@{
ViewData["Title"] = "Kullanıcı Profil Sayfası";
}
<h2>Kullanıcı Profil Sayfası</h2>
13. Area/Yonetim/Controllers/KullaniciYonetimiController
namespace Web.Areas.Yonetim.Controllers
{
[Area("Yonetim")]
public class KullaniciYonetimiController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Yonetim alanı, kullanıcı yönetimi işlemlerini yöneten bir kontrolcüye sahiptir.
14. Area/Yonetim/Views/KullaniciYonetimi/Index.cshtml
@{
ViewData["Title"] = "Kullanıcı Yönetimi";
}
<h2>Kullanıcı Yönetimi</h2>
15. Area/Musteri/Controllers/MusteriController
namespace Web.Areas.Musteri.Controllers
{
[Area("Musteri")]
public class MusteriController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Musteri alanı, müşteri hizmetleri ve taleplerini yönetir.
16. Area/Musteri/Views/Musteri/Index.cshtml
@{
ViewData["Title"] = "Müşteri Ana Sayfa";
}
<h2>Müşteri Ana Sayfa</h2>
17. Area/Finance/Controllers/FaturaController
namespace Web.Areas.Finance.Controllers
{
[Area("Finance")]
public class FaturaController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Finance alanı, finansal işlemler ve faturaların yönetimi için kullanılır.
18. Area/Finance/Views/Fatura/Index.cshtml
@{
ViewData["Title"] = "Fatura Yönetimi";
}
<h2>Fatura Yönetimi</h2>
19. Area/Satis/Controllers/ProduktController
namespace Web.Areas.Satis.Controllers
{
[Area("Satis")]
public class ProduktController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Satis alanı, ürün satışları ve işlemleri ile ilgilenir.
20. Area/Satis/Views/Produkt/Index.cshtml
@{
ViewData["Title"] = "Ürünler";
}
<h2>Ürünler</h2>
21. Area/Ariza/Controllers/ArizaYonetimiController
namespace Web.Areas.Ariza.Controllers
{
[Area("Ariza")]
public class ArizaYonetimiController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Ariza alanı, sistemdeki arıza ve bakım işlemlerini yönetir.
22. Area/Ariza/Views/ArizaYonetimi/Index.cshtml
@{
ViewData["Title"] = "Arıza Yönetimi";
}
<h2>Arıza Yönetimi</h2>
23. Area/Egitim/Controllers/KursController
namespace Web.Areas.Egitim.Controllers
{
[Area("Egitim")]
public class KursController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Egitim alanı, eğitim kurslarının yönetimi için kullanılır.
24. Area/Egitim/Views/Kurs/Index.cshtml
@{
ViewData["Title"] = "Eğitim Kursları";
}
<h2>Eğitim Kursları</h2>
25. Area/Depo/Controllers/DepoController
namespace Web.Areas.Depo.Controllers
{
[Area("Depo")]
public class DepoController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Depo alanı, depolama ve envanter yönetimi için kullanılır.
26. Area/Depo/Views/Depo/Index.cshtml
@{
ViewData["Title"] = "Depo Yönetimi";
}
<h2>Depo Yönetimi</h2>
27. Area/Yonetim/Controllers/RaporlarController
namespace Web.Areas.Yonetim.Controllers
{
[Area("Yonetim")]
public class RaporlarController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Yonetim alanı, yönetim raporlarının oluşturulmasını sağlar.
28. Area/Yonetim/Views/Raporlar/Index.cshtml
@{
ViewData["Title"] = "Yönetim Raporları";
}
<h2>Yönetim Raporları</h2>
29. Area/Blog/Controllers/KategoriController
namespace Web.Areas.Blog.Controllers
{
[Area("Blog")]
public class KategoriController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Blog alanı, blog kategorileri ve içeriği ile ilgilidir.
30. Area/Blog/Views/Kategori/Index.cshtml
@{
ViewData["Title"] = "Blog Kategorileri";
}
<h2>Blog Kategorileri</h2>
31. Area/Araba/Controllers/ArabaController
namespace Web.Areas.Araba.Controllers
{
[Area("Araba")]
public class ArabaController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Araba alanı, araç satışları ve bilgileri ile ilgilenir.
32. Area/Araba/Views/Araba/Index.cshtml
@{
ViewData["Title"] = "Araçlar";
}
<h2>Araçlar</h2>
33. Area/Servis/Controllers/ServisController
namespace Web.Areas.Servis.Controllers
{
[Area("Servis")]
public class ServisController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Servis alanı, sistemdeki bakım ve servis talepleri ile ilgilenir.
34. Area/Servis/Views/Servis/Index.cshtml
@{
ViewData["Title"] = "Servis Talepleri";
}
<h2>Servis Talepleri</h2>
35. Area/Medya/Controllers/MedyaController
namespace Web.Areas.Medya.Controllers
{
[Area("Medya")]
public class MedyaController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
Medya alanı, medya içerikleri ve yüklemeleri ile ilgilidir.
36. Area/Medya/Views/Medya/Index.cshtml
@{
ViewData["Title"] = "Medya İçerikleri";
}
<h2>Medya İçerikleri</h2>
Bu örnekler, ASP.NET Core MVC'de farklı işlevsel alanlarda nasıl modüler yapılar oluşturabileceğinizi gösteriyor. Her bir Area, belirli bir uygulama modülünü temsil eder ve projedeki yönetimi kolaylaştırır.