ASP.NET MVC Model

Paylaş

ASP.NET MVC içerisinde verilerden sorumlu olan katman olan model katmanı oluşturma, model binding ve kullanımı ile ilgili bilgiler yer alıyor.

Model nedir?

MVC yazılım mimarisi içerisinde verilerin yer aldığı katmana model katmanı denir.

Bu katmanda veriler veri sağlayıcılardan alınarak Controller ve View katmanında kullanılır.

Ayrıca View katmanından gelen veri ekleme, güncelleme ve silme işlemleri de bu katmanda yapılır.

ASP.NET MVC içerisinde bu katman POCO yani Plain Old CLR Object yapısı kullanılır.

Örnek Model dosyası aşağıda yer almaktadır.

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string FullName => $"{FirstName} {LastName}";
}

Entity Framework gibi bir ORM aracı kullanılmadığında ayrıca model içerisine metotlarda eklenebilir.

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string FullName => $"{FirstName} {LastName}";

    public Person() { }

    public static bool Ekle(Person person) { return true; }
    public static bool Guncelle(Person person) { return true; }
    public static bool Sil(int id) { return true; }
    public static Person Getir(int id) { return new Person(); }
    public static IEnumerable<Person> Listele() { List<Person> people = new List<Person>(); return people; }
}

Böyle bir yapı kullanıldığında SQL sorgularını yazmamız ayrıca birden fazla model varsa modeller arası ilişkiyi kurmamız gerekir.

Bu ve bunun gibi zorluklardan dolayı Entity Framework, Dapper, NHibernate gibi yardımcı araçlar tercih edilir.

Model validation

ASP.NET MVC modeller üzerinde çalışırken System.ComponentModel.DataAnnotations alanında yer alan çeşitli nitelikleri kullanarak modellere uygun değerleri girmemizi sağlar.

Nitelikler
Required
DisplayName
StringLength
Range
Bind
ScaffoldColumn
MaxLength
EmailAddress
DataType
RegularExpression

Niteliklerin kullanımı aşağıdaki gibidir.

public class Person
{
    public int ID { get; set; }
    [Required(ErrorMessage = "First name alanı gereklidir.")]
    [MaxLength(15)]
    public string FirstName { get; set; }
    [Required(ErrorMessage = "Last name alanı gereklidir.")]
    [MaxLength(15)]
    public string LastName { get; set; }
    [Required(ErrorMessage = "Email alanı gereklidir.")]
    [EmailAddress(ErrorMessage = "Hatalı e-posta adresi")]
    public string Email { get; set; }
    [Phone]
    [DataType(DataType.PhoneNumber)]
    public string PhoneNumber { get; set; }
    public string FullName => $"{FirstName} {LastName}";
}

Sadece validation özelliğini eklemek yeterli olmayacaktır.

Ayrıca View ve Controller içerisinde doğrulamanın kontrol edilmesi gerekir.

public ActionResult Index(Models.Person person)
{
    if (ModelState.IsValid)
    {
        // Model doğrulandı
    }

    return View();
}

Yukarıdaki kullanımda Person modeli Controller içerisine Model Binding ile dahil edilmiş ve ModelState.IsValid ile kontrol edilmiştir.

Model data annotations

ASP.NET MVC ile birlikte Entitiy Framework gibi araçlar sıklıkla kullanıldığından dolayı System.ComponentModel.DataAnnotations.Schema alanında yer alan nitelikler kullanılır.

Burada yer alan nitelikler modelin veritabanındaki tablo adı (Table), birincil anahtar (Key), model ilişkileri (ForeignKey) gibi niteliklerdir.

Validation ile birlikte Data Annotations kullanmak pek etkili bir yöntem değildir.

Çünkü bir özelliğin birden fazla niteliği olabilmekte ve karmaşıklığa sebep olmaktadır.

Data annotations yerine Entity Framework içerisinde yer alan Migration, Fluent API gibi yapıların kullanımı faydalı olacaktır.

Ayrıca validation işlemlerini ViewModel sınıflarında kullanmak karmaşıklığı azaltacaktır.

Sonuç

Model yapısı oluştururken olabildiğince sade ve POCO yapısına göre kullanmak faydalı olacaktır.

Ayrıca Model içerisinde kullanılabilen nitelikleri ORM ve ViewModel yapılarında kullanmak karmaşıklığı azaltacaktır.

.NET Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.


Bunlarda ilgini çekebilir


Destek almak için tıklayın.