Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu eğitim videosunda, 20 yıllık tecrübeye sahip bir yazılım geliştirici, Spring Boot ve Java teknolojilerinde yapılan yaygın hataları ve bunların çözümlerini anlatmaktadır.
- Video, Spring Boot geliştiricilerinin sık sık yaptığı 10 temel hatayı sistematik olarak ele almaktadır. Her hata için pratik örnekler ve kod gösterimleri sunulmaktadır. Konular arasında field injection yerine constructor injection kullanma, Spring Boot'un otomatik paket yapısını değiştirmeme, HTTP status kodlarının doğru kullanımı, exception handling, repository sınıflarındaki küçük-büyük harf hataları, Separation of Concerns, Bean Validation, @Valid annotation kullanımı, @Component, @Service, @Repository anotasyonlarının eksikliği, Lombok framework kullanımı ve port çakışması hatası bulunmaktadır.
- Konuşmacı, hata yapmanın doğal bir süreç olduğunu vurgulayarak, hataların hızlıca bulunup düzeltilebilmesinin önemini belirtmektedir. Video boyunca her hata için çözüm önerileri sunulmakta ve izleyicilere Spring Boot'u daha verimli kullanmaları için tavsiyelerde bulunulmaktadır.
- Spring Boot ile Yapılan En Büyük 10 Hata
- Videoda Spring Boot ile yapılan en büyük 10 hata gösterilecek ve bu hatalar son birkaç yıldır çeşitli projelerde Spring Boot ile yaşanılan deneyimlere dayanmaktadır.
- İlk hata, Spring Boot tarafından önerilmeyen field injection kullanmaktır.
- Field injection yerine constructor injection kullanılması önerilmektedir çünkü test ortamında sorunlar çıkabilir ve Spring Boot ekibi de bunu önermiyor.
- 03:16Constructor Injection Tavsiyesi
- Constructor injection yaparken class'ı final yapmak daha uygundur çünkü final değişkenler için constructor injection zorunludur.
- Constructor injection hakkında daha fazla bilgi için yazıları okumak tavsiye edilmektedir.
- Bu konu hakkında avantajları, dezavantajları ve sizin için daha iyi bir mimari ortaya çıkarmak için bilgi edinmek önemlidir.
- 04:58Spring Boot Paket Yapı Hatası
- İkinci hata, Spring Boot'un paket yapısını değiştirmektir.
- Spring Boot, giriş ana class'ın aynı hizasında ve alt paketlerdeki classları otomatik olarak tanır ve kontekste ekler.
- Bazı projelerde giriş ana class'ı farklı bir pakete taşındığında, diğer class'lar tanınmaz ve bu durum kontrol ve servislerin çalışmamasına neden olur.
- 08:52REST API Durum Kodları Hatası
- Üçüncü hata, REST API'lerde durum kodlarının doğru kullanılmasında hata yapmaktır.
- POST isteklerinde 200 durum kodu yerine 201 (Created) kullanmak daha mantıklıdır.
- HTTP durum kodlarını doğru kullanmak için ResponseEntity sınıfı kullanılabilir ve farklı durum kodları (404, 409 vb.) belirlenebilir.
- 13:31Exception Handling Hatası
- Exception handling, özellikle REST API ve uygulamalar için en önemli faktörlerden biridir ancak çoğu yazılımcı tarafından es geçiliyor.
- İyi exception handling yapmazsanız, frontend geliştiricileri ne verdiğini ve hataları anlamak için soru sormak zorunda kalıyor.
- Bir örnek olarak, bir API'de eksik veya yanlış bir ID gönderildiğinde 200 OK yanıt vermek yerine, eksiklik durumunda 404 Not Found yanıt verilmeli.
- 17:47Exception Handling Örneği
- Exception handling için bir controller'da ID varsa veriyi döndürür, yoksa exception oluşturur ve yukarı fırlatır.
- Exception Handling için bir Exception class'ı oluşturup, @ControllerAdvice annotation ile bir metot eklenir ve hangi exception'ları yakalayacağını belirtir.
- Bu yöntem, API'nin daha temiz ve anlaşılır olmasını sağlar, böylece frontend uygulamaları daha iyi hata yönetimi yapabilir.
- 21:39Repository Hatası
- Repository sınıflarında yapılan bir hata, genellikle entity sınıflarında property isimlerini yanlış yazmak.
- Spring Boot, uygulama çalıştırılırken repository sınıflarını analiz eder ve property isimlerini kontrol eder.
- Eğer yanlış bir property ismi kullanılırsa, uygulama çalışmaz hale gelir ve bu production ortamında büyük sorunlara yol açabilir.
- 27:35Altıncı Hata: İçeriği Ayırma
- İçeriği ayırma, yazılımda bir sınıfın veya metodun tek bir görevi olması gerektiği prensibidir.
- İşyerindeki görevler gibi, yazılımda da kontrol sınıfları dış dünyayla bağlantı kurar, servisler iş mantığını içerir ve depolama sınıfları veritabanı erişimini sağlar.
- Bazı geliştiriciler kontrol sınıflarına iş mantığını ve hata işleme kodlarını eklerler, bu da sınıfları karmaşık ve test edilmesi zor hale getirir.
- 29:25İçeriği Ayırma Örneği
- Get metodu örneğinde, try-catch bloğu, veritabanı erişimi ve hata işleme aynı sınıfta yer alıyor.
- Bu kod, birden fazla sonuç döndüğünde "Non-unique result exception" hatası veriyor.
- Bu tür kodlar test edilmesi zor, okunması zor ve yeniden kullanılması zor olan sınıflara dönüşür.
- 35:23İçeriği Ayırmanın Önemi
- İçeriği ayırma, yazılım mimarisinin düzgün olmasını sağlayan bir mimari prensibidir.
- Bu prensibe uyulduğunda, kod daha okunaklı olur ve sonraki geliştiriciler kodu daha kolay anlar.
- Kendiniz de birkaç ay sonra kodu tekrar incelemek zorunda kaldığınızda, prensibe uygun kod daha kolay anlaşılabilir.
- 36:04Yedinci Hata: Bean Validation
- Bean Validation, Java objelerinin nasıl doğrulanacağını belirleyen bir standarttır.
- Bu standart, REST API'lerde ve veritabanı işlemlerinde verilerin doğrulanmasında kullanılır.
- @NotEmpty annotation, bir alanın boş olmaması gerektiğini belirtir ve Spring tarafından otomatik olarak doğrulanır.
- 38:50Bin Validation Kullanımı
- Bin validation, gelen objelerin doğruluğunu kontrol ederek uygulamayı korur.
- Bin validation kullanılmadığında, geçersiz objeler doğrulama testlerinden geçer ve uygulama HTTP 500 hataları verir.
- HTTP 500 hataları, uygulamanın test edilmediğini veya düzgün çalışmadığını gösterir ve iş kariyeriniz için olumsuz etkilidir.
- 42:13İncapsulation Hatası
- İncapsulation yaparken et servis, et component veya et configuration gibi anotasyonlar kullanmak gerekir.
- Lombok adlı bir framework, kodu küçülterek fazla kod yazmamızı engeller.
- İncapsulation yapıldığında, et servis veya et component anotasyonu olmazsa uygulama çalışmaz ve "parametre of contract" hatası verir.
- 46:57Çoklu Konfigürasyon Hatası
- İki veya daha fazla aynı türdeki konfigürasyon sınıfı varsa, Spring context injection by type yaparak hangisini kullanacağını belirleyemez.
- Aynı türdeki iki konfigürasyon sınıfı varsa, et valf veya et anotasyonu kullanarak hangisinin kullanılacağını belirtmek gerekir.
- Konfigürasyon belirtilmediğinde uygulama çalışmaz ve "parametre sıfır" hatası verir.
- 51:41Spring Boot'da Konfigürasyon Hataları
- Konfigürasyon ile uğraşırken veya exter library'lerdeki class'ları kullanırken yapılan hatalar, Spring context'in çalışmasını engelleyebilir.
- Bu tür hataların çözümü hatanın kendisinde belirtilir, ancak tecrübesiz kullanıcılar hatanın nereden kaynaklandığını anlamakta zorlanabilir ve uzun süre arama yapabilirler.
- Bu hatalar zaman kaybına neden olabilir, bu nedenle proje için verimli olmak adına bu hataları yapmamak önemlidir.
- 53:05Microservice Ortamında Port Kullanma Hatası
- Microservice ortamında aynı port numarasını birden fazla servis için kullanmaya çalışmak hata verebilir.
- Her servise ayrı bir port numarası vermek gerekir, aksi takdirde "port already in use" hatası alınabilir.
- Bu hatayı çözmek için port numarasını değiştirmek gerekir ve bu değişikliği runtime configuration içinde yapmak daha güvenlidir.
- 56:34Video Özeti ve Tavsiyeler
- Video, Spring Boot ortamında yapılan en sık yapılan on hata hakkında bilgi vermek amacıyla hazırlanmıştır.
- Hata yapmak kötü bir şey değildir, önemli olan hata hızlı şekilde bulunup düzeltmektir.
- Yazılım dünyasında da çocuklar gibi düşe kalka öğreniriz, hata yaparız, ararız ve düzeltiriz.