avatar
·2 dk okuma
EventEmitter'ı ile Uygulama: EventEmitter'ı Genişletmek

EventEmitter'ı ile Uygulama: EventEmitter'ı Genişletmek

Node.js, JavaScript tabanlı, etkinlik odaklı bir platformdur ve bu platformda olaylar (events) merkezi bir rol oynar. Bu makalede, özel bir modül oluşturarak EventEmitter sınıfını nasıl genişleteceğimizi ele alacağız.

EventEmitter Genişletme

Node.js'in Events modülü, EventEmitter sınıfını döndürür. Bu sınıfın bir örneğini kullanarak, olayları yayabilir ve yayılan olaylara yanıt verebiliriz. Kendi modülümüzü oluşturarak, EventEmitter sınıfının üzerine inşa edebiliriz.

Özel Bir Sınıf Oluşturmak

Örneğin, bir PizzaShop sınıfı oluşturalım ve bu sınıfı EventEmitter'dan türetelim. Bunu yapmak için, öncelikle EventEmitter'ı içe aktaralım ve ardından extends anahtar kelimesini kullanarak PizzaShop sınıfını genişletelim.

const EventEmitter = require('events');

class PizzaShop extends EventEmitter {
    constructor() {
        super();
        this.orderNumber = 0;
    }

    placeOrder(size, topping) {
        this.orderNumber++;
        this.emit('order', size, topping);
    }

    displayOrderNumber() {
        console.log(`Mevcut sipariş numarası: ${this.orderNumber}`);
    }
}

Olaylarla Çalışmak

placeOrder metodunda, bir olay yayıyoruz (this.emit('order', size, topping)). Bu, PizzaShop sınıfının bir EventEmitter gibi davranmasını sağlar.

Olay Dinleyicilerini Eklemek

Bu sınıfı kullanarak, örneğin index.js dosyasında olay dinleyicileri ekleyebiliriz.

const PizzaShop = require('./PizzaShop');
const pizzaShop = new PizzaShop();

pizzaShop.on('order', (size, topping) => {
    console.log(`Sipariş alındı: ${size} pizza, ${topping} ile.`);
});

pizzaShop.placeOrder('büyük', 'mantar');
pizzaShop.displayOrderNumber();

Ek Modüllerle İş Birliği Yapmak

Ayrıca, başka bir modül oluşturarak (örneğin, DrinkMachine) bu olaylara yanıt verebiliriz. Bu, modüller arasındaki sıkı bağlantıyı azaltarak, daha modüler ve bakımı kolay kod yazmamıza olanak tanır.

// DrinkMachine.js
class DrinkMachine {
    serveDrink(size) {
        if (size === 'büyük') {
            console.log('Ücretsiz içecek servisi yapıldı.');
        }
    }
}

module.exports = DrinkMachine;

Index.js'de bu modülü kullanarak, order olayına ek yanıtlar ekleyebiliriz:

const DrinkMachine = require('./DrinkMachine');
const drinkMachine = new DrinkMachine();

pizzaShop.on('order', (size, topping) => {
    drinkMachine.serveDrink(size);
});

Özet

Bu makalede, EventEmitter sınıfını genişleterek özel bir modül oluşturmanın temellerini ele aldık. Ana noktalar şunlardır:

  1. EventEmitter sınıfını genişleterek kendi özel modüllerimizi oluşturabiliriz.

  2. Bu yaklaşım, event tabanlı mimariyi kullanarak modüler ve bakımı kolay uygulamalar geliştirmemize olanak tanır.

  3. Kendi eventlerimizi yayabilir ve bu olaylara çeşitli şekillerde yanıt verebiliriz.