C# da field ve propertylerde unchancing state bildirmenin 3 farklı yolu vardır. Yani nesne create edildikten sonra artık property değerleri değiştirilemez.
29 Aralık 2022 Perşembe
Init-Only, Get-Only, ve Readonly
23 Aralık 2022 Cuma
Exception
Exception hangding de yapılan hatalar
1: Exceptionu Yakalamamak( Not Catching Exceptions )
- Connecting to external APIs
- Connecting to database
- Executing SQL statements
- Working with operating system
- Requesting resources over the internet
- Working with hardware devices such as cameras or microphones
İşte bu kod doğru gibi görünüyor. Ancak, yukarıdaki throw ex sözdizimi kötü bir uygulamadır. Yukarıdaki hatanın bu metodu çağıran yer tarafından yakalanmasını sağlamaktan başka bir şey yapmıyor.
- A class requires a parameter that has a valid value and was given an invalid one
- The system needs to talk to the database, but the database appears to be offline
- The file the user is trying to load is not in the correct format
- ArgumentException
- InvalidOperationException
- FormatException
- İstisnanın nerede meydana geldiğini bilmek (the stack trace)
- İstisnanın tam type ını bilmek (the GetType method helps with this)
- İstisna için yararlı bir mesaja sahip olmak
- Meydana gelen istisnaya özel ek ayrıntılara sahip olmak
21 Aralık 2022 Çarşamba
AsSplitQuery
19 Aralık 2022 Pazartesi
CAP Teoremi
CAP teoremi, dağıtık bir sistemin en çok istenen üç özellikten sadece ikisini sağlayabileceğini söyler. Bu özellikler Tutarlılık (Consistency), Erişilebilirlik (Availability) ve Bölünme Toleransı (Partition Tolerance)‘dır. Bu özelliklerden sadece ikisinin üst düzeyde sağlanabileceğini bilmek, bize ihtiyaçlarımıza uygun dağıtık sistemi seçmekte yardımcı olacaktır.
15 Aralık 2022 Perşembe
Message Queue vs Message Broker
Microservis Mimarisi, farklı taskları yerine getiren çok sayıda küçük uygulamadan oluşan bir sisteme sahip olmaktır. Bu farklı uygulamalar bir biriyle nasıl iletişime geçecekler ?
Message Queue
Message Broker
Message queue vs message broker
14 Aralık 2022 Çarşamba
Yield Keyword
Bir class'ın foreach iterasyonuna sahip olabilmesi için IEnumerable interfacesini implement etmesi gerekmektedir. Bunun yerine yield keywordu kullanılabilir.
13 Aralık 2022 Salı
Repositoryde Return Type Ne Olmalıdır : IQueryable, IEnumerable or IReadOnlyList?
Repository kullanarak Get ile bir Domain Object Collectionu (GetUsers, GetProduct) geriye dönmek istediğimizde bir kaç dönüş türü arasında seçim yapabiliriz.
- IQueryable<T>
- IEnumerable<T>
- IReadOnlyList<T>
IQueryable<T> Return Type
- Veritabanı sorgusu, yalnızca sonuç gerçekten istendiğinde execute edildi.(GetUsers() ta değil, yalnızca ToList() yöntemi çağrılırken).
- Where ifadeleri ekleyerek sorgu hazırlanmaya devam ediyoruz. Hala veritabanından kayıt çekmedik
- ToList() metodunu ekleyerek artık filtrelerle( where vs.) hazırladığımız sorguyu veritabanına gönderiyoruz.
IEnumerable<T> Return Type
IEnumerable Linq => Object işlemlerinde daha yararlı iken IQueryable Linq => Sql işlemlerinde daha kullanışlıdır.
IReadOnlyList<T> Return Type
9 Aralık 2022 Cuma
MVC Architecture Pattern
MVC
MVC Çalışma Prensibi
Bir MVC projesinde kullanıcı, tarayıcı üzerinden (View) sayfaya istek yaptığında bu istek Controller’a iletilir. Controller isteği gerçekleştirmek üzere model ve bağlantılı bileşenleri ile gerekli sınıf ve metotları çağırır. Elde ettiği sonuçları View’e göndererek sayfanın görüntülenmesini sağlar.
5 Aralık 2022 Pazartesi
Middleware ve Pipeline
- Bir user, Web browser aracılığıyla bir web application yada web servise request gönderir.
- Request, ASP .NET uygulamasını barındıran(hosting eden) web sunucusu tarafından alınır.
- Web sunucu, Requesti ASP .NET runtime iletir. ASP.NET'e gelen requestler Thread Pooldaki Threadler tarafından ele alınır.Thread poolda yaklaşık 5000 adet thread bulunmaktır.Eğer bu threadlerin hepsi dolarsa web sunucusunun Queuesuna alınır. Eğer burasıda dolarsa uygulama 503 : Server To Busy Hatası verir . Bunu önlemek için web servisimizi asenkron olarak kodlamaya özen göstermeliyiz.
- ASP .NET Runtime , Requesti işler ve requesti ve kullanıcıya geri gönderilecek response hakkındaki bilgileri içeren bir HTTP Context oluşturur.
- Request , ASP .NET pipelinedaki bir dizi adımdan veya "aşamalardan" geçirilir.
Uygulama içerisinde tanımlı olan middleware'ler register edilme sırasıyla birlikte yukarıdaki resimde olduğu gibi birbirlerini call ederek pipeline'ı tamamlarlar.
ASP.NET Core Derinlemesine Dependency Injection
Dependency Injection, Bir sınıfın bağımlı olduğu sınıfların, bu sınıf içine dışarıdan enjekte edilme işlemidir. Temel amaç somut sınıflara olan bağımlılığı ortadan kaldırmak ve test edilebilirliği kolaylaştırmaktır.
Bir servis DataServiceye bağımlıysa direkt olarak DataServicenin kendisine bağımlıdır. Bunun gibi servisleri test etmek zor olabilir . Bunun yerine servisimiz IDataServiceye bağlıysa sadece inteface tarafından sağlanan contractlar önemsenir. Hangi uygulamanın implemente edildiğinin bir önemi kalmaz. Servisin davranışını test etmek için IDataServicenin Mockunu kullanabiliriz.
Service Lifetime
Implementation factories
InvalidOperationException
exception fırlatır.