Takip et

NestJS’de Mongoose ile Genel Bir Depo Desenine Giriş

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 implements IRepository {
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

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version