Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Spring Boot Temiz Kodlama Pratikleri

Spring Boot Temiz Kodlama Pratikleri

İlk yayın19 Aralık 2024
Son güncelleme20 Aralık 2024
Okuma süresi3 dk okuma
JavaKotlinSpring BootTemiz Kodlama
XLinkedInFacebook
Spring Boot Temiz Kodlama Pratikleri

Beğeni yükleniyor...

Temiz kodlama pratikleri, Spring Boot uygulamalarınızın bakımını kolaylaştırır, okunabilirliğini artırır ve geliştirilebilirliğini sağlar. Bu rehber, hem Java hem de Kotlin'de daha temiz ve verimli kod yazmanıza yardımcı olacak temel ipuçları ve kod örneklerini sunar.


Son güncelleme20 Aralık 2024

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleSpring Boot DevToolsSonraki makaleSpring Boot ile OpenAPI
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

Spring Boot Configuration Properties
Programlama

Spring Boot Configuration Properties

@ConfigurationProperties ile tip-güvenli yapılandırma tanımlamayı, @Validated ile ayarları doğrulamayı ve profile-specific application-{profile}.yml dosyalarıyla ortama göre değer yönetimini öğrenin.

4 Şubat 20263 dk okuma
JavaKotlinSpring BootYapılandırma
Spring Boot GraphQL JWE Kimlik Doğrulama
Programlama

Spring Boot GraphQL JWE Kimlik Doğrulama

Stateless şifreli JWT’ler (JWE) ile Spring Boot GraphQL API’lerinizi güvenli hale getirmeyi; kullanıcı kimliği ve rolleri JPA ile bir veritabanında saklamayı öğrenin.

17 Mayıs 20256 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEGraphQL
Spring Boot JPA ile JWE Kimlik Doğrulaması
Programlama

Spring Boot JPA ile JWE Kimlik Doğrulaması

Stateless şifreli JWT’ler (JWE) kullanarak Spring Boot API’lerinizi güvenli hale getirirken, kullanıcı kimliklerini ve rolleri JPA destekli bir veritabanında nasıl saklayacağınızı öğrenin.

11 Mayıs 20254 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEJPA

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden Temiz Kodlama?

Temiz kodlama ilkelerini benimsemek şu faydaları sağlar:

  • Kodun okunabilirliğini ve bakımını iyileştirir.
  • Teknik borcu azaltır.
  • Yeni geliştiricilerin projeye alışmasını kolaylaştırır.
  • Genişletilebilirlik ve hata ayıklama süreçlerini geliştirir.

📋 Gereksinimler

🗌 Aşağıdakilere sahip olduğunuzdan emin olun:

  • ☕ Java Development Kit (JDK) 17+
  • 📦 Maven veya Gradle kurulu
  • 🔤 Bir Java IDE (IntelliJ IDEA, Eclipse vb.)
  • 🛠️ Spring Boot temel bilgilerine hakimiyet

🛠️ Adım 1: Projenizi Yapılandırın

Spring Boot projenizi daha net bir hale getirmek için aşağıdaki gibi organize edin:

  • Controller Katmanı: Gelen HTTP isteklerini yönetir.
  • Service Katmanı: İş mantığını içerir.
  • Repository Katmanı: Veritabanı ile etkileşir.

Örnek Klasör Yapısı:

Bu klasör yapısı, katmanlar arası sorumlulukları ayırarak bakım ve geliştirme hızını artırır.

FILENAME
src/main/java/com/example/cleanproject
├── controller
├── service
├── repository
├── entity
└── dto

🛠️ Adım 2: Java Kodlarında Lombok Kullanımı

Lombok, Java'daki gereksiz kodu azaltarak sınıflarınızı daha kısa ve okunabilir hale getirir. İşte Lombok'u etkili bir şekilde kullanmanın yöntemi:

Lombok Bağlılığını Ekleyin

Önce Lombok bağımlılığını ekleyerek tekrar eden getter/setter ve constructor kodlarını otomatik üretime bırakın.

  • Maven:
XMLpom.xml
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <scope>provided</scope>
</dependency>
  • Gradle:
GROOVYbuild.gradle
provided 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

Örnek: Lombok ile Entity

Aşağıdaki örnek, Örnek: Lombok ile Entity için pratik bir bağlam sunar ve doğrudan uygulanabilir.

JAVAUser.java
package com.example.cleanproject.entity;

import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;
}

Faydalar:

  • @Data, getter, setter, equals, hashCode ve toString metotlarını otomatik olarak oluşturur.
  • @NoArgsConstructor ve @AllArgsConstructor yapıcı metotları oluşturur.

🛠️ Adım 3: Kotlin'de Kısa ve Okunabilir Kod Yazın

Kotlin, modern özellikleri ile doğal olarak daha temiz kod yazılmasını sağlar:

Örnek: Kotlin ile Entity

Aşağıdaki örnek, Örnek: Kotlin ile Entity için pratik bir bağlam sunar ve doğrudan uygulanabilir.

KOTLINUser.kt
package com.example.cleanproject.entity

import jakarta.persistence.*

@Entity
data class User(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    var name: String,
    var email: String
)

Kotlin'in Avantajları:

  • data class, toString, equals ve hashCode metotlarını otomatik olarak oluşturur.
  • Değişmez özellikler (val) daha iyi stabilite sağlar.

🛠️ Adım 4: Dependency Injection Prensiplerini Takip Edin

Bileşenleri ayırmak ve test edilebilirliği arttırmak için dependency injectionu kullanın.

Örnek: Service Katmanı ile DI

Aşağıdaki örnek, Örnek: Service Katmanı ile DI için pratik bir bağlam sunar ve doğrudan uygulanabilir.


🛠️ Adım 5: Veri Transferi İçin DTO'ları Kullananın

Data Transfer Object (DTO), domain ve API katmanlarını ayırarak daha iyi kapsülleme sağlar.

Örnek: User İçin DTO

Aşağıdaki örnek, Örnek: User İçin DTO için pratik bir bağlam sunar ve doğrudan uygulanabilir.


Controller Katmanı

HTTP isteklerini yönetmek ve service katmanıyla etkileşim sağlamak için bir controller uygulayın.


▶️ Uygulamayı Çalıştırma

Uygulamayı aşağıdaki komutla çalıştırın:

BASH
./mvnw spring-boot:run

Postman veya cURL gibi bir aracı kullanarak endpoint'leri test edin.


🧪 API'yi Test Edin

API'yi aşağıdaki cURL komutu ile test edebilirsiniz:

  • Tüm kullanıcıları getir:
BASH
curl -X GET http://localhost:8080/api/users

🏁 Sonuç

Artık Spring Boot Temiz Kodlama Pratikleri için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

JAVAUserService.java
package com.example.cleanproject.service;

import com.example.cleanproject.entity.User;
import com.example.cleanproject.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}
KOTLINUserService.kt
package com.example.cleanproject.service

import com.example.cleanproject.entity.User
import com.example.cleanproject.repository.UserRepository
import org.springframework.stereotype.Service

@Service
class UserService(
    private val userRepository: UserRepository
) {
    fun getAllUsers(): List<User> = userRepository.findAll()
}
JAVAUserDTO.java
package com.example.cleanproject.dto;

import lombok.Data;

@Data
public class UserDTO {
    private String name;
    private String email;
}
KOTLINUserDTO.kt
package com.example.cleanproject.dto

data class UserDTO(
    val name: String,
    val email: String
)
JAVAUserController.java
package com.example.cleanproject.controller;

import com.example.cleanproject.dto.UserDTO;
import com.example.cleanproject.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping
    public List<UserDTO> getAllUsers() {
        return userService.getAllUsers();
    }
}
KOTLINUserController.kt
package com.example.cleanproject.controller

import com.example.cleanproject.dto.UserDTO
import com.example.cleanproject.service.UserService
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/api/users")
class UserController(
    private val userService: UserService
) {

    @GetMapping
    fun getAllUsers(): List<UserDTO> = userService.getAllUsers()
}