Generic sınıflar OOP programlama yaparken C# ta kurtarıcı bir özelliğe sahiptir. Bu yüzden genericleri çok iyi anlamamız gerekiyor.
Generic nedir ?
Örneklerle açıklamaya çalışayım.
Kurduğumuz bir
CRUD
operasyonlarını içeren yapıyı her nesne için tekrar tekrar yazmamak için onu bir tip kullanmaya zorlamadan generic bir yapı oluşturarak her nesnemize uyarlanabilir hale getireceğiz.
Customer sınıfımızı ve onun Crud operasyonlarını içeren DAL interface'i üzerinden gidelim.
interface ICustomerDal
{
List<Customer> GetAll();
Customer Get(int id);
void Add(Customer customer);
void Update(Customer customer);
void Delete(Customer customer);
}
ICustomerDal customer classı için crud operasyonlarının imzalarını tutan bir interface. b
Burada bir sıkıntımız yok ancak aynı işlemlere ihtiyaç duyan birden fazla sınıfımız olunca ve işlemler birbirine çok benzeyince;
interface IProductDal
{
List<Product> GetAll();
Product Get(int id);
void Add(Product product);
void Update(Product product);
void Delete(Product product);
}
Tip (customer,product) kısmını generic bir yapıyla halledebilirsek eğer bize çok faydası olacaktır.
Yeni bir interface oluşturuyorum ve ismini Irepository koyuyorum.
interface IRepository<T>
{
List<T> GetAll();
T Get(int id);
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
Yeni interface'imizin içerisine aynı metodları koyuyorum. Bu sefer listelerde gördüğümüz tip belirme olayını interface'in isimlendirme kısmında görüyoruz.
Bunun anlamı ben implemente edildiğim yerden bir tip alacağım ve içerimde bulunan metod ve alanlarda bu T yerine ne geldiyse onları uygulayacağım.
Kullanım Şekli
Artık ICustomerDal ve IProductDal interfacelerimizi boş bırakıyoruz ve Irepository implementasyonu gerçekleştiriyoruz.
interface ICustomerDal:IRepository<Customer>
{
}
interface IProductDal:IRepository<Product>
{
}
Görüldüğü gibi çalışacağımız tipi implemente ederken söylüyoruz ve kolayca uygulamış oluyoruz. Artık ortak operasyonları IRepository içerisine sadece product sınıfına veya customer sınıfına özel olan işleri ise onların interfaclerinde yazıyoruz ve aynı yapıyı daha az kod, daha sürdürülebilir bir yapı ile kurmuş oluyoruz.
Top comments (0)