Singleton Nedir 2 Senaryoda Kullanımı
Singleton günümüzde developerların katmanlı mimariler de ve düzenli sistemlerde en çok kullanılan dizayn pattern’lerden bir tanesi
Peki Nedir Bu SingleTon ?
Singleton türkçesi yalnızlık prensibi anlamına gelmekte yani bir nesne yaratıyorum ama o nesneyi tekrar tekrar örneklemem(Instance almak) gerekmeden kullanmama yardımcı oluyor hem bellekten kazanıyorum hem de zamandan 🙂 aşağı’da bir senaryo kurguluyorum ve o senaryoya göre hareket edeceğiz.
Senaryo 1) EntityFramework ile bir Mssql’i Database’e bağladık ve Database İsmiEntitesli bir entitymiz oluştu bu senaryoda katmanlı mimari üzerinden çalışacağımız için her seferinde entity’e instance almadan tek bir instance ile tüm sql işlerimizi yöneteceğiz. katmanlı mimarimiz her tablo veya tablo grupları için açılmış olacak herhangi bir Get ve Set metodlarındaki database örneklemesini singleton ile yapacağız.
— Öncelike Bu Senaryoda EntityFramework ile database’in oluşturulup katmanlara atıldığını anlatmayacağım için yapılmış varsayıyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span style="color: #000000;">public class DbModal { private DbModal() { } private static CozumDbEntities _Database; public static CozumDbEntities _DbInstance { get { if (_Database == null) _Database = new CozumDbEntities(); return _Database; } } } } </span> |
Katmanımız da bir class oluşturuyoruz ismini DbModal yapıyorum Classımız Statik olmalı her yerde erişilebilmesi ve kullanılabilmesi için
sonrasında bir entityModelimizi tanımlıyoruz tabi ki oda statik olacak sonrasında istersek bir adet default construckter oluşturabiliriz ama private olma şartıyla(Erişim izni olmaması için)
sonrasında Entitymodelimizi döndüren bir static metod yazıyoruz sonrasında bir if ile entity eğer null sa instance’sını alıyoruz ve alt satırda entityi return ediyoruz.
1 2 3 4 5 6 7 | <span style="color: #000000;">public class AppUserOperation { CozumDbEntities db; public AppUserOperation() { db = DbModal._DbInstance; }</span> |
daha sonra kullanmamız durumunda katmada bir adet entitymodel oluşturuyoruz ama instance almıyoruz. Daha sonrasında ise ctor ile default construckterimizi oluşturuyoruz ve içerisindeki entity modelimizi statik oluşturduğumuz metod’a bağlıyoruz ve işlem tamam bundan sonra tekbir dbmodeli ile çalışacaksınız ve projeniz daha optimize çalışacak.
Senaryo 2) Bu senaryomuzda sizin bir tarih çevirciye ihtiyacınız var ve bunu her seferinde string formatla yapmak zorunda kalıyorsunuz ve kodlar daha karmaşık hale geliyor burada da bir statik sınıf açıyoruz ve içerisinde statik metodlar ile tarihi çevirip ekranda gösteriyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span style="color: #000000;"> public class SingleTon { public static int Sum (int a,int b) { return a+b; } public static int DateTimeIncrease(DateTime Now,DateTime increaseDay) { var day = increaseDay.AddYears(2).Year - Now.Year; return day; } public static string DeleteToDatetimeHour(DateTime Date) { var datetime = string.Format("{0:dd,MM,yyyy}", Date); return datetime; } }</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span style="color: #000000;"> class Program { static void Main(string[] args) { Console.WriteLine(SingleTon.DateTimeIncrease(DateTime.Now,DateTime.Now)); } }</span> |
kullanım şekline gelirsek ben bu örneği console app üzerinden yaptım kullanacağım metodları statik olarak oluşturdum ve dolayısıyla Singleton.DeleteToDatetimeHour() şeklinde ulaşabiliyorum ve artık işim daha da kolaylaştı hiç instance almadan yoluma devam edebilirim.