Sayfalar

19 Şubat 2013 Salı

ASP.NET MVC DERSLERİ ( 4.1 ) MODEL NEDİR?

"model" kelimesi yazılım geliştirmede bir çok anlama gelebilir. ASP.NET MVC için modelin anlamı nesnelerdir. Bu nesneler bazen iş kurallarını içeren nesneler bazende veritabanı temsil eden nesneler olabilir.

Modelleri bir kalıp olarak görebiliriz. Bu kalıp view ve controller arasında veri taşımaya yarar. MVC bu yapıları kullanarak view ve controller için standart CRUD(create, read, update, delete) işlemleri için hazır şablonlar sunar. Bu yapıya scaffolding (iskele) denir. Bu yapıyı ilerdeki konularda tartışıyor olacağız. Şimdi örneklerle model kavramını anlamaya çalışalım.

MODEL TANIMLAMA

Daha öncede belirtmiştik, yeni proje oluştururken internet application şablonunda oluşturursak, proje için gerekli olan css, js ve üyelik için gerekli view, model ve controllerlar hazır olarak gelir. Model klasörünün içerisinde ise üyelik için gerekli olan View sayfalarına özel sınıflar vardır.

Model klasörünün içerisinde üyelik sayfalarına özel model dışında başka model yoktur. MVC bizim çalışma alanımızı bilmediğinden, başka model yoktur. Biz kendi modellerimizi oluşturacağız.

Model örneğimizi bir haber portalı yapıyormuşuz gibi hazırlayacağız. Modellerimiz Haber, Yazar ve Kategori olsun. Bu modellerimiz CRUD işlemlerini gerçekleştirebilecek yapıda olsun.
haber sınıfı aşağıdaki gibidir.
public class Haber
{
    public virtual int id { get; set; }
    public virtual int yazarId { get; set; }
    public virtual int kategoriId { get; set; }
    public virtual string baslik { get; set; }
    public virtual string aciklama { get; set; }
    public virtual string icerik { get; set; }
    public virtual Yazar yazar { get; set; }
    public virtual Kategori kategori { get; set; }
}

Bu haber sınıfına one-to-one bağlı olan yazar sınıfı;
public class Yazar
{
    public virtual int id { get; set; }
    public virtual string ad { get; set; }
    public virtual string eposta { get; set; }
    public virtual string ozgecmis { get; set; }
}

Haber sınıfına one-to-many bağlı olan Kategori sınıfı;
public class Kategori
{
    public virtual int id { get; set; }
    public virtual int ad { get; set; }
    public virtual List<Haber> haberler { get; set; }
}

Bu oluşturduğumuz modeller veritabanı tablolarımızı temsil ediyor. Dikkat ederseniz Haber sınıfının içerisinde foreign_key olarak kategori ve yazar id si bulunuyor. Ayrıca kategori sınıfı içerisinde o kategorinin haberlerini temsil eden bir haberler listesi var.

Bilirsiniz ki veritabanı tabloları arasındaki bağlantılar bu foreign_key ler ile yapılır. Aynısını bizde sınıflar arasında yapıyoruz. Sınıflarda aslında foreign_key kullanmasakta olur. foreign_key özelliğinin sınıflarda kullanılmasının çok fazla avantajı vardır. Çünkü MVC bu yapıyı kullanan araçlar sunmaktadır. Konular ilerledikçe bunun önemini daha iyi anlayacağız.

9 yorum:

  1. Ali bey, buradaki virtual keyword ne işe yarıyor?

    YanıtlaSil
    Yanıtlar
    1. Kendisinden türetilen sınıflarda, bu özellikleri override edebilir. Burada aslında çokta kullanımının gerekliliği yok. Genelde tanımlanabilir.

      Sil
  2. Kategori tablosu içerisinde haberlerin tutulması bize neyi sağlıyor. Haberler tablosu içerisindeki verilerden kategori id si şu olanları getir diyerek işlem yapamazmıyız? Burada bunu tanımlamanın bir artısı var mı?

    YanıtlaSil
    Yanıtlar
    1. İlişkisiz tablo oluşturmuş olursunuz. Kategori haberlerini cekerken örneğin;

      IList Haberler = db.Haber.Where(x=>x.KategoriId == kategori.Id);

      şeklinde cekersiniz ama ilişkili olursa

      IList Haberler = kategori.Haberler;

      Şeklinde cekersiniz. Tamamen ikişkili bir veritabanı tasarımı ve EF nin tüm kolaylıklarını kullanabilmek için boyle tanımlıyoruz...

      Sil
  3. Merhaba sanırım
    public virtual yazarId { get; set; }
    public virtual kategoriId { get; set; }
    Tip tanınlanmamış

    YanıtlaSil
    Yanıtlar
    1. evet haklısınız. Düzeltiyorum hemen :)

      Sil
  4. [HTTPGET]
    public ActionResult Create(){
    }

    İLE

    [HTTPPOST]
    public ActionResult Create(){
    }

    Arasındaki fark nedir yardımcı olabilirmisiniz?

    YanıtlaSil
    Yanıtlar
    1. Aşağıdaki linkten inceleyebilirsiniz.

      http://www.yazilimdilleri.net/YazilimMakale-3451-ASP-NET-MVC-FORM-KULLANIMI-VE-POST---GET-METODLARI.aspx

      Sil