0% found this document useful (0 votes)
2 views6 pages

Java Döküman

Uploaded by

yalnizamaozgur
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views6 pages

Java Döküman

Uploaded by

yalnizamaozgur
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Katmanlı Mimari

Katmanlı mimarinin amacı sorumlulukları ayırmak, bakımı kolaylaştırmak, test


edilebilirliği arttırmaktır.

Kullanıcı > Controller (API layer) > Service (Business Layer) > ReopRepository (Data
Access Layer) > Database

Temel katmanlar bunlardır. Katmanlar üstten alta doğru konuşur.

Best Practise: model/entity -> Repository-> Service->Dto/mapper->Controller şekilde


kurmaktır.

Controller (Sunum katmanı, Application Process Interface Layer)


Controller sadece YÖNLENDİRİCİDİR. Yani bu sebepten service’e yönlendireceği için
içinde service’ın bir örneğini injection ile oluşturmak zorundayız.

Inject ettiğimiz service daima private final olarak işaretlenir.


Controller dış dünyadan (http request) gelen istekleri karşılayan sınıftır.
@RestController anotasyonu ile tanımlanır. Exception handling için @ControllerAdvice
kullanılır.

Kullanıcının isteğini alır, gerekli servisleri çağırır ve sonucun uygun http cevabını
çevirir.

Swagger gibi araçlarla endpointleri belgelemek best practise.

İstemciden http isteği gelir (Get,post)

DispatcherServlet Url ile eşleşen bir yöntemi bulur Bulunan metot iş mantığını
barındıran service katmanına çağrı yapar o çağrıdan gelen http cevabı responserEntity
olarak döndürülür.

DTO (Data Transfer Object)

Veri alışverişinde kullanılan sade Java sınıflarıdır. Veriyi dış dünyaya açmamak için,
istenilen alanları özel biçimde göstermek için ve frontend ile backend arasında veri
taşımak için kullanılır.
Veri İletişimi ve Bağlantısızlık: Uygulamanızın farklı katmanları veya bileşenleri
arasında veri taşırken, veri transferinin hızlı ve hatasız olması önemlidir. DTO, bu
amaçla kullanılarak veri iletimini kolaylaştırır. Verilerinizi tek bir nesnede toplarsanız,
farklı bileşenler arasındaki iletişim daha bağlantısız ve daha güvenilir hale gelir.

Veri Saklama Yapısının Gizlenmesi: DTO, veri tabanı veya diğer kaynaklardan gelen
verilerin nasıl saklandığını gizleyebilir. Bu, uygulamanızın iç yapısının dış dünyadan
izole edilmesine yardımcı olur ve daha fazla esneklik sağlar. Veri tabanı şeması veya
veri yapısı değişse bile, DTO’nun dış dünyadaki kullanımı etkilenmez.

İhtiyaç Duyulan Verilerin Seçimi: DTO, yalnızca belirli verilerin iletilmesini sağlar. Bu,
gereksiz veri transferini önler ve ağ trafiğini azaltır. Özellikle mobil uygulamalarda
veya yavaş bağlantılarda performansı artırabilir.

Güvenlik ve İzin Kontrolü: DTO, belirli verilerin sadece yetkililere iletilmesini


sağlayarak güvenlik ve izin kontrollerini kolaylaştırabilir. Bu, hassas verilerin sızmasını
önlemeye yardımcı olabilir.

Service (Business Layer)


Servis katmanı iş kurallarının uygulandığı yerdir. Controllerden gelen isteği işler,
gerekirse veritabanınıa gider DTO’yu dönüştürür.

Doğrulama,hesaplama gibi işlemler yapılır, Repository ile konuşur, controllera sadece


gerekli sonucu verir.

Repository(Data Access Layer)


Veritabanı ile iletişim kuran katmandır. JPA ile yapılır. Veritabanına ekleme silme
güncelleme. Entity nesneleri ile çalışır.

Entity(Model, Persistance Layer)


Veritabanı tablolarını temsil eden sınıflardır. JPA anotasyonları ile tanımlanır.

Encapsulation Alanlar private olur getter/Setter ile erişim sağlanır.

Mapper katmanı (BONUS)


Entity ve Dto arasında dönüşümü yapan sınıftır. MapStruct gibi library ile oromatik
yapılabilir.

MANTIK:

1. Kullanıcı istek yapar -> controller devreye girer.


2. Controller DTO’yu alır Service katmanına yollar
3. Service katmanında Dto -> entity çevirimi yapılır veritabanına Repository ile
kaydeder
4. Kaydedilen Entity tekrar DTO’ya çevrilir ve Controller’’a döner
5. Controller bunu http cevabı olarak user’a iletir.
Yapı Ne İşe Yarar? Katman

Controller HTTP isteklerini karşılar, servis çağırır API

DTO Veri taşır, entity dış dünyaya açılmaz API <-> Business

İş mantığını yürütür, veritabanı işlemini


Service Business
yönetir

Repository Veritabanıyla konuşur Data Access

Entity Tabloları temsil eder Model / ORM

JPA (Java Persistence API)

Entitylerin ilişkisel veritabanında nasıl saklanacağını belirleyen spesifikasyondur.


Arayüzdür doğrudan kullanılamaz. Gibernate, EclipseLink,OpenJpa gibi kütüphaneler
bu arayüzü uygulayarak kullanılabilir hale getitr.

Entity veri tabanındaki bir tabloyu temsil eden sınıftır.

Hiçbir anotasyon almayan sınıf değişkenleri doğrudan aynı isim ve veri tipi kullanılarak
veritabanında bir kolon ile eşleştirilir

[Link] veya [Link] paketleri altında tanımlanır.

 Java sınıflarını doğrudan veritabanı tablolarıyla eşleştirmek


 SQL yazmadan veritabanı işlemleri yapmak
 Veritabanından veri çekip nesnelere dönüştürmek (veya tersi)
 Kodun veri erişim katmanını daha modüler ve test edilebilir hale getirmek

İlişki Türü Açıklama

@OneToOne Bir entity yalnızca bir diğer entity ile eşleşir.

@OneToMany Bir entity, birçok diğer entity ile ilişkilidir.

@ManyToOne Birçok entity, bir entity ile ilişkilidir.

@ManyToMany Çok sayıda entity, çok sayıda diğer entity ile


ilişkilidir

Kon İpuc
u u

Lazy vs >>Her zaman LAZY kullan, performans kontrol


Eager sende olsun
Cascad >>REMOVE'ü dikkatli kullan, her şeyi
e kaskad yapma

mappedBy Yanlış yazılırsa ilişki


>> kurulmaz

JoinColumn Kolon adı tanımlamazsan default isimlendirme


>> karmaşık olur

JOIN >>N+1 problemini


FETCH engeller

orphanRemoval Koleksiyonlardan çıkarılan nesneleri


>> gerçekten siler

Dependency Injection

Şimdi bir sınıfın içinde diğer sınıfta yazdığımız şeylere ihtiyaç duyunca normalde
newleyerek örneğini oluştururuz. Ama sınıfın nesne örneğini oluşturmak sınıfları
birbirine yapışır hale getirir. Bunun yerine DI kullanıyoruz. IOC demek kontrolü
başkasına veriyoruz demek bu senaryoda bu Spring oluyor. Nesnelerin yaşam
döngülerini spring belirliyor.

Bir sınıf, kendi bağımlılıklarını (yani ihtiyaç duyduğu diğer nesneleri) kendisi
oluşturmak yerine, dışarıdan (bir başka sınıf ya da framework tarafından)
sağlanmasını (enjekte edilmesini) kabul eder.
Bu sayede sınıflar, birbirlerine sıkı sıkıya bağlı hale gelmez; yani geç bağlılık (loose
coupling) sağlanır.

DI, Inversion of Control (IoC) prensibinin bir uygulamasıdır. Normalde bir sınıfın
ihtiyacı olan diğer nesneleri kendisi oluşturması beklenirken, IoC prensibi ile bu kontrol
başka bir yapıya (örneğin bir container veya framework) devredilir. Böylece:

 Kontrolün Tersine Çevrilmesi (IoC): Sınıflar kendi ihtiyaçlarını doğrudan


yönetmez; bu yönetim dış bir bileşen tarafından yapılır.

 DI, IoC’yi gerçekleştiren yöntemlerden biridir.

DI uygulaması 3 farklı biçimde yapılabilir.

1)Constructor Injection

Bağımlılıklar, sınıfın yapıcı (constructor) metodu aracılığıyla enjekte edilir.

(tekrar edilecek)
MapStruct

MapStruct, Java'da iki farklı veri nesnesi arasında kolayca dönüşüm yapmak
için kullanılan bir kütüphanedir. örneğin Entity → DTO ya da DTO → Entity gibi nesne
dönüşümlerini otomatik olarak yapan bir araçtır.

@Mapping anotasyonu ile kaynaktan hedefe dönüşüm kurallarını belirtmek


mümkündür.

🎯 Neden Kullanıyoruz?

Projelerde genelde şu gibi nesneler olur:

 UserEntity: Veritabanı ile çalışan sınıf

 UserDTO: API'den gelen/giden veri sınıfı

Bu iki sınıfın benzer alanları olur, ama birbirinden farklıdır. Genelde bu iki sınıf
arasında dönüşüm yapmanız gerekir.

MapStruct bu dönüşüm işini sizin yerinize yapar.

Logger

uygulamanın çalışma sürecinde olan biteni kayıt altına almak için kullanılır. Bu kayıtlar
(loglar), hata ayıklamak, uygulamanın davranışını analiz etmek, performansı izlemek
ve güvenlik amacıyla kritik öneme sahiptir.

Önem seviyelerine göre sınıflandırılır. Bunlar DEBUG, INFO, WARNING, ERROR,


CRITICAL.

POJO (plain old java object)

Java'da herhangi bir framework veya kütüphaneye bağımlı olmadan yazılmış, sadece
veri taşıyan basit sınıflardır. Genellikle sadece özellik (field) ve bunlara erişmek
için getter/setter metodlarını içerir. Hiçbir Java EE ya da Spring anotasyonu içermez.

implements ya da extends gibi özel yapı zorunluluğu yoktur.

Kendi başına bağımsızdır.


Genellikle varsayılan kurucu metot (constructor) içerir.

toString(), equals(), hashCode() metodları isteğe bağlı olarak eklenebilir.

Immutability (Değişmezlik) prensibi: Bir nesne bir kez oluşturduktan sonra


değişmemeli. Yan etki azalır, kodun testi kolaylaşıt, multithreading güvenlik artar.

You might also like