Skip to main content

IdentifiedModel

Veri tabanı varlıkları/modelleri için inherit almaları gereken abstract bir class'dır. Veri tabanı modelleri için ortak olarak barındırmaları gerken property'ler bu class içerisinde tanımlanmıştır.

Genel Yapısı

PropertyTypeDescription
IdintVeri tabanı PK değeridir.
AddUserIdint?Insert işlemini yapan kullanıcı UserId saklar.
UpdateUserIdint?Update işlemini yapan kullanıcı UserId saklar.
AddDateDatetimeInsert işleminin yapıldığı tarihi saklar.
UpdateDateDatetime?Update işleminin yapıldığı tarihi saklar.
ObjStatusIdintİlgili kaydın durumunu aktif, silinmiş, taslak vb.
Versionintİlgili kaydın version bilgisini tutar.
PrevVersionIdint?İlgili kaydın önceki version'una ait version bilgisini tutar.
UpdateVersionintİlgili kaydın güncel version'una ait version bilgisini tutar.
DynamicJsonValstringİlgili kayda harici olarak eklenen DynamicColumn değerlerini tutar.
OrganizationIdintİlgili kayda ait organizasyon bilgisini tutar.
ReservedNamestringEk olarak saklanabilir Ad bilgisini tutar.
ReservedDescriptionstringEk olarak saklanabilir Açıklama bilgisini tutar.
ReservedPicturestringEk olarak saklanabilir Resim bilgisini tutar.
ReservedSmallPicturestringEk olarak saklanabilir Küçük Resim bilgisini tutar.
Reserved1stringEk olarak saklanabilir Alan 1 bilgisini tutar.
Reserved2stringEk olarak saklanabilir Alan 2 bilgisini tutar.

Bu sınıf ile birlikte her bir model için bu alanların tanımlanmasına gerek kalmaz. Ayrıca BaseCrudDal.cs içerisinde gerçekleşen operasyonlar için ortak sınıf olarak ta kullanılır.

BaseModel

IdentifiedModel BaseModel abstract class'ından inherit almaktadır.

PropertyAddtionalAttributes()

Bu metot ile property'lerin üstlerine tanımlamış olduğumuz attribute'leri bu kısım altında da tanımlayabiliyoruz. Burada attribute tanımlarken yaklaşım olarak property'lerin üstüne bir attribute tanımlamak yerine bu metot içerisine tanımlanmaları best practice'dir. Kod bu şekilde daha okunabilir olmaktadır.

SampleProduct.cs
public class SampleProduct : IdentifiedModel
{
[CustomName("Product Number")]
[CustomRequired]
[CustomRegion(1)]
[CustomOrder(1)]
public string Number { get; set; }

[CustomName("Product Name")]
[CustomRequired]
[CustomRegion(1)]
[CustomOrder(2)]
public string Name { get; set; }

[CustomName("Product Quantity")]
[CustomRegion(2)]
[CustomOrder(1)]
public int Quantity { get; set; }
}
danger

Klasik Kullanım yerine Best Practice de ifade edildiği gibi model yapılanmamızı PropertyAddtionalAttributes() ile ayarlamamız gerekmektedir.

Best Practice örneğinde görüleceği üzere //1-1-Number ile ilgili property'nin hangi sırada ve hangi bölgede olacağını belirterek çok sayıda property'si olan modellerde okuma kolaylığıda sağamaktadır. Bu şekilde tanımlanmaz ise içeriğindeki CustomName, CustomOrder ve CustomRegion'dan göz ile seçilmesi gerekecektir.

Bu metotu önemli kılan şeylerden biri ise; property üstüne tanımlanan attribute'lerde metot çağıramıyor olmamızdır.

//Bu tanımlama yapılamaz kod hata verir. 
//Bu yüzden CustomName() için GlobalResourceHandler'dan değerini çekmek için
//PropertyAddtionalAttributes() içerisinde tanımlanması gerekir.
[CustomName(GlobalResourceHandler.ProductName)]
public int Name { get; set; }

ModelPropertySubListForAddUpdate()

Bu metot ile ekleme ve güncelleme işlemleri sırasında kullanılacak olan property listeleri hazırlanır. Bu listeler içerisinde yer alan property'ler ile ekrana çizilecek olanlar belirlenmektedir.

public override List<ModelPropertySubList> ModelPropertySubListForAddUpdate
{
get
{
return new List<ModelPropertySubList>
{
new ModelPropertySubList(SublistEnums.ModelPropertyEnum.GeneralAddUpdate,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Number).Name,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Name).Name,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Quantity).Name
)
};
}
}

ModelPropertySubListForShowing()

Bu metot ile gösterim ve listeleme işlemleri sırasında kullanılacak olan property listeleri hazırlanır. Bu listeler içerisinde yer alan property'ler ile ekrana çizilecek olanlar belirlenmektedir.

warning

Veri tabanı üzerinden hazırlanmış rapor ile liste gösterimi yapılıyor ise bu metot kullanılmamaktadır.

public override List<ModelPropertySubList> ModelPropertySubListForShowing
{
get
{
return new List<ModelPropertySubList>
{
new ModelPropertySubList(SublistEnums.ModelPropertyEnum.GeneralShow,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Number).Name,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Name).Name,
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Quantity).Name
)
};
}
}