NestJS’de Mongoose ile Genel Bir Depo Desenine Giriş
NestJS ile MongoDB’de çalışırken, verileri yönetmek için kullanılan bir tasarım desenidir. Bu desen, kodunuzun daha okunabilir, test edilebilir ve bakımı kolay olmasını sağlar. Bu yazıda, NestJS uygulamalarınızda Mongoose ile genel bir depo deseninin nasıl uygulanacağını inceleyeceğiz.
Depo Deseninin Avantajları
Depo deseni, kodunuzun daha modüler ve yeniden kullanılabilir olmasını sağlayan bir dizi avantaj sunar:
- Kodun Ayrılması: Depo deseninde, veritabanı erişimi ile iş mantığı ayrı tutulur. Bu, her ikisinin de bağımsız olarak test edilmesini kolaylaştırır.
- Yeniden Kullanılabilirlik: Depo sınıfı, farklı işlevlerde yeniden kullanılabilir, bu da kod çoğaltılmasını önler.
- Bakım Kolaylığı: Veritabanı veya modelleme yapısı değiştiğinde, değişiklikler sadece depo sınıfı içerisinde yapılır.
- Uyumluluk: Depo deseni, farklı veritabanı sistemleriyle uyumludur. Mongoose yerine başka bir ORM kullanmanız gerekirse, deponuzu kolayca değiştirebilirsiniz.
Genel Bir Depo Sınıfının Uygulanması
Genel bir depo sınıfı oluşturmak için Mongoose’in sağladığı yetenekleri kullanacağız. İlk olarak, temel depo arayüzümüzü tanımlarız:
“`typescript
import { Model } from ‘mongoose’;
export interface IRepository
create(entity: T): Promise
findAll(): Promise
findOne(id: string): Promise
update(id: string, entity: T): Promise
delete(id: string): Promise
}
“`
Bu arayüz, her depo sınıfının uygulaması gereken temel yöntemleri tanımlar. Bu yöntemler, veri oluşturma, tüm veri listeleme, tek bir veriyi bulma, güncelleme ve silme işlemlerini kapsar.
Şimdi, bu arayüzü kullanan bir temel depo sınıfı oluşturabiliriz:
“`typescript
import { Injectable } from ‘@nestjs/common’;
import { Model } from ‘mongoose’;
import { IRepository } from ‘./repository.interface’;
@Injectable()
export class BaseRepository
constructor(private readonly model: Model
async create(entity: T): Promise
const createdEntity = new this.model(entity);
return await createdEntity.save();
}
async findAll(): Promise
return await this.model.find().exec();
}
async findOne(id: string): Promise
return await this.model.findById(id).exec();
}
async update(id: string, entity: T): Promise
return await this.model.findByIdAndUpdate(id, entity, { new: true }).exec();
}
async delete(id: string): Promise
const result = await this.model.findByIdAndDelete(id).exec();
return !!result;
}
}
“`
Bu sınıf, Mongoose modelini bir yapıcı parametre olarak alır ve temel depo yöntemlerini uygular. Her yöntem, verileri Mongoose modelini kullanarak işlemek için uygun Mongoose işlemlerini kullanır.
Depo Sınıfının Kullanımı
Artık temel depo sınıfımızı oluşturduk, onu özel modellerimiz için depo sınıfları oluşturmak için kullanabiliriz. Örneğin, bir ‘User’ modeli için depo sınıfı şöyle olacaktır:
“`typescript
import { Injectable } from ‘@nestjs/common’;
import { InjectModel } from ‘@nestjs/mongoose’;
import { Model } from ‘mongoose’;
import { User, UserDocument } from ‘./user.schema’;
import { BaseRepository } from ‘./base.repository’;
@Injectable()
export class UserRepository extends BaseRepository
constructor(@InjectModel(User.name) private userModel: Model
super(userModel);
}
}
“`
Bu örnekte, @InjectModel dekoratörü, User modelini deponun yapıcı parametresine enjekte eder. UserRepository, BaseRepository sınıfından kalıtılır ve UserDocument modelini kullanır.
Sonuç
NestJS ile MongoDB’de genel bir depo deseni oluşturmak, kodunuzun daha düzenli ve bakımı kolay olmasını sağlayabilir. Bu desen, veritabanı erişimini iş mantığından ayırır ve kodunuzu daha modüler ve yeniden kullanılabilir hale getirir. Depo deseni, kodunuzun karmaşıklığını yönetmenize ve NestJS uygulamanızın ölçeklenebilirliğini artırmanıza yardımcı olur.
Depo deseni, NestJS uygulamalarınızda verileri yönetmek için güçlü bir yöntemdir. Uygulama geliştirme sürecinizi kolaylaştırmak ve kodunuzun daha iyi bir şekilde yapılandırılmasını sağlamak için bu deseni göz önünde bulundurmanızı tavsiye ederim.
Daha fazla bilgi ve örnek için fatihsoysal.com web sitesini ziyaret edebilirsiniz.
**Not:** Bu makalede, temel depo desenini oluşturmak için Mongoose ile genel bir örnek sağlanmıştır. Depo desenini özelleştirebilir ve uygulamanızın gereksinimlerine göre daha fazla işlev ekleyebilirsiniz. Özellikle büyük ölçekli uygulamalarda, deponuzu daha da soyutlayabilir ve farklı veritabanı sistemlerini desteklemek için arayüzler kullanabilirsiniz.
Umarım bu makale, NestJS uygulamalarınızda genel bir depo desenini kullanmanız için faydalı olmuştur.
#Etiketler
NestJS, Mongoose, MongoDB, Depo Desen, ORM, Veritabanı Erişim, Kod Modülasyon, Yeniden Kullanılabilirlik, Bakım Kolaylığı, Uyumluluk, İş Mantığı, Modelleme