TypeORM Lifecycle Hooks ve Event Listeners
TypeORM Lifecycle Hooks ve Event Listeners
Modern Node.js uygulamalarında veri tabanı işlemlerinin kontrolünü esnekleştirmek; veri bütünlüğü, güncelleme/ekleme gibi işlemler sırasında ek işlemler yapmak için TypeORM lifecycle hooks ve event listeners büyük kolaylık sağlar. Bu makalede, TypeORM ile hayat döngüsü kancaları (lifecycle hooks) ve olay dinleyicileri (event listeners) nasıl kullanılır, aradaki farklar nedir ve doğru uygulama yöntemleri teknik ayrıntılarla anlatılacaktır.
Lifecycle Hooks Nedir?
Lifecycle hooks, bir entity üzerinde insert (ekleme), update (güncelleme), remove (silme) gibi işlemler gerçekleşirken doğrudan entity sınıfı içinde tanımlanıp otomatik tetiklenen fonksiyonlardır. Bu özellik, örneğin bir kullanıcı eklemeden önce şifreyi hash'leme veya bir kaydı silmeden önce log tutulması gibi işlemleri otomatikleştirmek amacıyla idealdir.
Örnek Lifecycle Hook Kullanımı
import { Entity, PrimaryGeneratedColumn, Column, BeforeInsert } from "typeorm";
import * as bcrypt from "bcryptjs";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
password: string;
@BeforeInsert()
async hashPassword() {
this.password = await bcrypt.hash(this.password, 10);
}
}
Yukarıdaki örnekte @BeforeInsert lifecycle hook'u ile, User entity'sine kullanıcı eklenmeden önce şifresi hash'leniyor.
Event Listeners Nedir?
Event listeners ise entity dışında da tanımlanabilen ve uygulamanın tamamındaki işlemleri merkezi bir noktadan dinleme olanağı sunar. Böylece birden fazla entity için aynı davranışı kolayca yönetebilirsiniz. Yani, event listeners ile ilgili olayları takip edip ilave aksiyonları merkezi şekilde devreye alabilirsiniz.
Örnek Event Listener Kullanımı
import { EventSubscriber, EntitySubscriberInterface, InsertEvent } from "typeorm";
import { User } from "./User";
@EventSubscriber()
export class UserSubscriber implements EntitySubscriberInterface<User> {
listenTo() {
return User;
}
beforeInsert(event: InsertEvent<User>) {
console.log(`Ekleme öncesi: `, event.entity);
}
}
Bu örnekte ise tüm User insert işlemleri için merkezi olarak bir loglama yapılmaktadır. Subscriber implementasyonu ile log mantığını birden fazla entity için genişletebilirsiniz.
Lifecycle Hooks ve Events: İşlevsel Farklar
TypeORM lifecycle hooks ve event listeners arasındaki temel fark; hooks'un doğrudan entity sınıfında tanımlanması, event listener'ların ise harici ve merkezi kullanılabilmesidir. Büyük projelerde event listener kullanmak kod tekrarını azaltır ve olay yönetimini kolaylaştırır. Daha küçük ya da entity özelinde işlemler için lifecycle hook'lar yeterlidir.
Sonuç
TypeORM Lifecycle Hooks ve Event Listeners kavramları, veri tabanı işlemlerinde esneklik isteyen geliştiriciler için vazgeçilmezdir. İster entity odaklı ister uygulama geneli olsun, bu mekanizmaları doğru kullanarak hem güvenliği artırabilir hem de kodunuzu daha sürdürülebilir hale getirebilirsiniz. Uygulamanızın ihtiyaçlarına göre iki yöntemi akıllıca kullanmak, TypeORM ile profesyonel çözümler geliştirmenizin anahtarıdır.

Yorum Gönder