-
Devamını oku: En Özet Haliyle Api Gateway Nedir? Ne İçin Kullanılır?
Api Gateway bir istemcinin (web, mobil veya herhangi bir tüketicinin) doğrudan mikroservislere erişimini engeller. Böylece tüketicinin mikroservislere olan bağımlılığı ortadan kalkar. İstemcinin mikroservisle doğrudan iletişim kurması doğru değildir çünkü dediğim gibi bağımlılık yaratır. Bu bağımlılık şu anlama gelir; gelecekte mikroservislerden birisini değiştirmek, arayüzünü güncellemek ya da iki mikroservisi birleştirmek istersek tüketici tarafında da değişikliğe gitmemiz gerekecektir ve tüketiciyi kullanan kullanıcılar bu durumda doğrudan etkilenecektir. İşte bunu yapmamak için bu işlemi…
-
Yazılımcı Maceraları: Eskiyi Yenilemek mi, Baştan Yazmak mı?
Devamını oku: Yazılımcı Maceraları: Eskiyi Yenilemek mi, Baştan Yazmak mı?Bir çok yazılımcı ile bir çok macera yaşadık. Denk geldiğim en büyük maceralar hep eski bir sistemi yeni bir sisteme geçirme çabasıydı. Çünkü eski sistem adı üstünde eskide kalmış ama aynı zamanda sürekli problem çıkarıyor. Yeni sistem yazılmaya başlanır, pattern’ler, kuyruklar, validation’lar vs… Yazılım ekibinde bir iki kişi önderlik yapar ve proje yenilenmeye başlar. Asıl sorun şu; bu yenilenme işi yıllardır devam ediyordur ve yine sistem çökmeleri, yine yavaşlıklar, yine…
-
Derinlik mi Genişlik mi?
Devamını oku: Derinlik mi Genişlik mi?Derinlemesine bir yazılım dilini bilen, yazılım geliştirme ilkelerine hakim bir geliştirici mi? Yoksa çok sayıda teknolojii yeterince bilen bir full-stack geliştirici mi? Bir kere şu konulara hakim olmanın çıkacak ürünün kalitesini doğrudan etkilediğini biliyoruz aslında. Neydi onlar? Bunları yapan geliştiriciye ver projeyi, yaslan arkana. Ama günümüz teknolojisinde bu projenin ihtiyaç duyduğu teknoloji bağlantıları neler ve nasıl kurgulanmalı? İşte bunu görebilen kişi de altyapı ve entegrasyon katmanlarını bilen kişidir. Neydi onlar?…
-
Lazy vs Eager Loading
Devamını oku: Lazy vs Eager Loading“Lazy Loading”, Türkçeye tembel yükleme olarak çevrilse de, kavramsal olarak bu çeviri bazen kafa karıştırabilir. Aslında mantık şudur:İlişkili veriler, ancak onlara gerçekten ihtiyaç duyulduğunda sorgulanır. Bu yaklaşım, başlangıçta performans kazandırabilir, ancak kontrolsüz kullanıldığında ciddi N+1 problemi doğurur. Adım adım gidelim. Lazy Loading kullanabilmemiz için UseLazyLoadingProxies() çağrısı yapılmalıdır. OnConfiguring metodunda : Ya da AddDbContext metodunda Diğer bir gereklilik ise virtual anahtar kelimesi: Entity içinde tanımladığımız ilişkili tabloları virtual vermemiz gerekir. Bu…
-
AutoMapper mı? Kontrollü Mapping mi? Deneyimden Öğrendiklerim…
Devamını oku: AutoMapper mı? Kontrollü Mapping mi? Deneyimden Öğrendiklerim…Bir önceki çalıştığım firmada çok güzel bir yaklaşımla mapping işlemleri yapıyorduk. AutoMapper gibi kütüphaneler kullanmadık. Çünkü AutoMapper, bazı görünmeyen ve fark edilmesi zor hatalara yol açabiliyor. Örneğin: Bu yüzden biz mapping işlemlerini doğrudan extension methodlar ile, açık ve test edilebilir bir şekilde yönetiyorduk. Refactor dostu, okunabilir ve kontrol tamamen bizdeydi. Bu tür kütüphaneler yerine basitçe nasıl mapping işlemleri yaptık aşağıda:
-
Adapter, Strategy ve Factory Pattern ile Çoklu Dosya Yüklemek
Devamını oku: Adapter, Strategy ve Factory Pattern ile Çoklu Dosya YüklemekModern yazılımlarda dosya yüklemek genellikle Amazon S3 veya Azure Blob gibi servislerle yapılır. Ancak birçok kurum hala FTP gibi eski altyapıları kullanmaktadır. Bu yazıda, eski ve yeni dosya yükleme sistemlerini nasıl tek bir noktadan yönetebileceğimizi, Adapter, Strategy ve Factory Pattern’lerini kullanarak anlatmaya çalışacağım. Bu senaryoda kullandığım tasarım desenleri ve görevleri şu şekilde: İlk olarak bir interface oluşturuyoruz IFileUpload. Bu interface tüm file upload işleminin en ortak metodunu barındırır ki tüm…
-
Singleton Tasarım Deseni: En Sık Yapılan Hatalar ve Çözümleri
Devamını oku: Singleton Tasarım Deseni: En Sık Yapılan Hatalar ve Çözümleri1 – Gizli Bağımlılık Problemi Singletone bir nesneyi DI kullanarak ihtiyaç duyulan nesneye vermek gerekir. Aksi takdirde aşağıdaki gibi hatalı bir davranış test yazarken singleton nesneyi mock edememene sebep olur. Sınıfın dışa bağımlılığı yokmuş gibi görünmesine sebep olur. Bu sınıfı test ederken LoggerSingleton’ı mock edemezsiniz çünkü KitchenService sınıfı içinde bir constructor bulunmuyor. Bunun yerine DI kullanarak Singletone nesneyi dışarıdan verebilirsiniz: 2 – Global Durum Oluşması. Sonuç => Sıkı Bağlılık Bunu…
-
Factory Tasarım Deseni
Devamını oku: Factory Tasarım DeseniTemel mantık birbirine benzer nesnelerin aynı arayüzden türetilerek oluşturulmasıdır. Bununla beraber sınıflar bir arayüzden tanımlandığı için gevşek bağlılık prensibini de yerine getirmiş olur. Genel olarak kullanım şekli isteği gönderen istemcinin gönderdiği isteğe göre sonucu döndürebilecek yapının çalışma zamanında oluşturulmasıdır. İşin püf noktası zaten burada gizli “istemciden gelen bilgiye göre yapının oluşturulması”. Bu tasarım deseni bilgisine ve pratiğine sahip olmayan yazılım geliştiriciler, içinde gelen isteğe göre bolca oluşturulmuş if blokları bulunan…