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ı
Property | Type | Description |
---|---|---|
Id | int | Veri tabanı PK değeridir. |
AddUserId | int? | Insert işlemini yapan kullanıcı UserId saklar. |
UpdateUserId | int? | Update işlemini yapan kullanıcı UserId saklar. |
AddDate | Datetime | Insert işleminin yapıldığı tarihi saklar. |
UpdateDate | Datetime? | Update işleminin yapıldığı tarihi saklar. |
ObjStatusId | int | İlgili kaydın durumunu aktif, silinmiş, taslak vb. |
Version | int | İlgili kaydın version bilgisini tutar. |
PrevVersionId | int? | İlgili kaydın önceki version'una ait version bilgisini tutar. |
UpdateVersion | int | İlgili kaydın güncel version'una ait version bilgisini tutar. |
DynamicJsonVal | string | İlgili kayda harici olarak eklenen DynamicColumn değerlerini tutar. |
OrganizationId | int | İlgili kayda ait organizasyon bilgisini tutar. |
ReservedName | string | Ek olarak saklanabilir Ad bilgisini tutar. |
ReservedDescription | string | Ek olarak saklanabilir Açıklama bilgisini tutar. |
ReservedPicture | string | Ek olarak saklanabilir Resim bilgisini tutar. |
ReservedSmallPicture | string | Ek olarak saklanabilir Küçük Resim bilgisini tutar. |
Reserved1 | string | Ek olarak saklanabilir Alan 1 bilgisini tutar. |
Reserved2 | string | Ek 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.
- Klasik Kullanım
- Best Practice
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; }
}
public class SampleProduct : IdentifiedModel
{
public string Number { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public override Dictionary<PropertyInfo, AttributeArray> PropertyAddtionalAttributes()
{
Dictionary<PropertyInfo, AttributeArray> entityProps = new Dictionary<PropertyInfo, AttributeArray>
{
//1-1-Number
{
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Number),
new AttributeArray(
new CustomName(GlobalResourceHandler.ProductNumber),
new CustomRequired(),
new CustomOrder(1),
new CustomRegion(1)
)
},
//1-2-Name
{
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Name),
new AttributeArray(
new CustomName(GlobalResourceHandler.ProductName),
new CustomRequired(),
new CustomOrder(2),
new CustomRegion(1)
)
},
//2-1-Quantity
{
PropertyHelper.GetPropertyInfo<SampleProduct>(x => x.Quantity),
new AttributeArray(
new CustomName(GlobalResourceHandler.ProductQuantity),
new CustomRequired(),
new CustomOrder(1),
new CustomRegion(2)
)
},
};
return entityProps;
}
}
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.
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
)
};
}
}