برنامه نویسی

📢 اجرای رویدادها با بهار: یک مثال عملی

مقدمه

تصور کنید که شما در حال توسعه یک سیستم پخش موسیقی هستید. هر زمان که کاربر سرویس را امضا کند ، ما می خواهیم چندین عمل را به صورت خودکار انجام دهیم ، مانند ارسال ایمیل خوش آمدید ، اعطای یک دوره تست رایگان و به روزرسانی وضعیت امضا.

به جای اتصال این اقدامات به طور مستقیم در جریان ثبت نام ، می توانیم از رویدادها برای حفظ کد سازمان یافته تر ، انعطاف پذیر و غیرقابل استفاده استفاده کنیم. بیایید ببینیم که چگونه بهار می تواند به ما کمک کند به طور خودکار این کار را انجام دهیم! 😃


🎯 مشکل تجارت

با ثبت یک مشترک جدید ، باید چندین عمل را انجام دهیم:

  • ارسال یک ایمیل خوش آمدید
  • یک دوره تست رایگان اعطا کنید
  • وضعیت کاربر را به روز کنید

یک رویکرد ساده لوحانه به سادگی فراخوانی این روشها به طور مستقیم در جریان ثبت نام خواهد بود ، اما این امر باعث ایجاد اتصال قوی بین اقدامات می شود. ما یک سیستم انعطاف پذیر تر می خواهیم که بتوانیم بدون تغییر منطق اصلی ، رویدادها را اضافه یا حذف کنیم.


🛠 اجرای با رویدادها

ما از بهار برای مدیریت خودکار رویدادها و اقدامات مربوطه آنها استفاده خواهیم کرد.

تعریف کلاس 1 امضا

ما کلاس را ایجاد کردیم Assinatura نمایندگی یک کاربر مشترک:

public class Assinatura {
    private String usuario;

    public Assinatura(String usuario) {
        this.usuario = usuario;
    }

    public String getUsuario() {
        return usuario;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2⃣ تعریف رابط رویداد

اول ، ما یک رابط ایجاد کردیم که قرارداد را برای کلیه رویدادهایی که باید پس از ثبت نام جدید اجرا شود ، تعریف کند:

public interface EventoNovaAssinatura {
    void processa(Assinatura assinatura);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این رابط توسط کلیه کلاس هایی که نیاز به واکنش به یک امضا جدید دارند ، پیاده سازی می شود.

3⃣ اجرای رویدادها

اکنون ما اقدامات خاصی را که باید هنگام ایجاد امضای جدید انجام شود ، پیاده سازی می کنیم.

email ایمیل خوش آمدید

@Service
public class EmailBoasVindas implements EventoNovaAssinatura {
    @Override
    public void processa(Assinatura assinatura) {
        System.out.println("[EMAIL] Bem-vindo, " + assinatura.getUsuario() + "! Sua assinatura foi ativada.");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🎁 آزمون رایگان اعطا کنید

@Service
public class TesteGratis implements EventoNovaAssinatura {
    @Override
    public void processa(Assinatura assinatura) {
        System.out.println("[TESTE GRÁTIS] Usuário " + assinatura.getUsuario() + " recebeu um período de teste de 7 dias!");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

✅ وضعیت امضای را به روز کنید

@Service
public class AtualizaStatus implements EventoNovaAssinatura {
    @Override
    public void processa(Assinatura assinatura) {
        System.out.println("[STATUS] Assinatura de " + assinatura.getUsuario() + " ativada com sucesso!");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کلاس 4 که وقایع را ارکستر می کند

ما خدمتی ایجاد کردیم که به طور خودکار اجرای رویدادها را مدیریت می کند:

@Service
public class EventosNovaAssinatura {
    @Autowired
    private Set<EventoNovaAssinatura> eventos;

    public void processa(Assinatura assinatura) {
        eventos.forEach(evento -> evento.processa(assinatura));
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا ، بهار به طور خودکار تمام لوبیا هایی را که پیاده سازی می کنند تزریق می کند EventoNovaAssinatura هیچ Set eventosبشر این بدان معنی است که هر زمان که یک اجرای جدید اضافه کنیم ، بدون نیاز به تغییر چیزی در کد اصلی ثبت می شود! 🎉


🎯 چگونه بهار به طور خودکار وقایع را تزریق می کند؟

بهار اسکن به طور خودکار تمام کلاسهای ذکر شده با @Service رابط EventoNovaAssinaturaبشر او تمام این موارد را در آن تزریق می کند Set eventosاطمینان از پردازش تمام رویدادها به درستی و بدون پیکربندی دستی.

این به دنبال کنترل اصل معکوس و به شما امکان می دهد بدون تغییر کد اصلی ، رویدادهای جدید را اضافه کنید و سیستم را مدولار تر و آسان تر کنید. ✅


گزینه های گسترش رویداد

استفاده از رویدادها به ما امکان می دهد اقدامات جدید را به سادگی اضافه کنیم. برخی از پیاده سازی های احتمالی که می توانند به جریان ما اضافه شوند:

  • 📦 ادغام با پیام رسان ها: رویدادها را در RabbitMQ یا Kafka برای پردازش ناهمزمان منتشر کنید.
  • 🔔 اعلان ها را فشار دهید: اعلان ها را به تلفن همراه کاربر ارسال کنید.
  • 💳 اتهام خودکار: برای فعال کردن هزینه مکرر با یک سیستم پرداخت ادغام شوید.
  • 📊 ثبت معیارها: داده ها را به یک سیستم نظارت ، مانند پرومتئوس ارسال کنید.
  • 🛠 سفارشی سازی پیشرفته: یک گردش کار ایجاد کنید که به مدیران اجازه می دهد تا رویدادها را بصورت پویا فعال یا غیرفعال کنند.

🛠 الگوها و اصول

🔄 استاندارد ناظر

در مثال ما از ناظر پیش فرض، جایی که کلاس EventosNovaAssinatura به عنوان یک عمل می کند موضوع که مجموعه ای از ناظران (EventoAssinaturaConfirmada). این الگوی به شما امکان می دهد منطق اطلاع رسانی جریان اصلی را نادیده بگیرید ، و اطمینان حاصل کنید که می توان اقدامات جدید را بدون اصلاح کد موجود اضافه کرد.

این هماهنگ با اصل باز (OCP – اصل باز/بسته)، زیرا ما می توانیم بدون تغییر اجرای برنامه ، رویدادهای جدیدی را اضافه کنیم EventosNovaAssinaturaبشر فقط یک کلاس جدید ایجاد کنید که پیاده سازی کند EventoAssinaturaConfirmadaو بهار به طور خودکار آن را ضبط می کند.

🔌 کنترل معکوس و تزریق وابستگی ها

بهار باعث می شود مدیریت وابستگی خودکار با تزریق پویا همه پیاده سازی ها EventoAssinaturaConfirmada در داخل Set eventoAssinaturaConfirmadaبشر این امر نیاز به فوری دستی این اشیاء را از بین می برد و مقیاس پذیری و آزمایش کد را تسهیل می کند.

این رویکرد به دنبال اصل وابستگی معکوس (اصل وارونگی وابستگی)، زیرا کلاس های سطح بالا (EventosNovaAssinatura) به طور مستقیم به اجرای مشخص وقایع وابسته نیست ، بلکه به انتزاع (EventoAssinaturaConfirmada).

princip اصل مسئولیت واحد (SRP – اصل مسئولیت واحد)

هر کلاس از کد ما دارد یک مسئولیت واحد:

  • EventosNovaAssinatura: مسئول پردازش امضاها و اطلاع رسانی به وقایع.
  • NotificacaoEmail: ارسال ایمیلی برای تأیید امضای.
  • GerarRelatorio: سیستم را با گزارش جدید به روز می کند.
  • Assinatura: یک امضای وضعیت تأیید را نشان می دهد.

این طرح مدولار سازمان کد را بهبود می بخشد و تعمیر و نگهداری را تسهیل می کند زیرا هر کلاس روی یک کار واحد تمرکز می کند.


📚 نتیجه گیری

با این رویکرد ، ما یک سیستم انعطاف پذیر ، مدولار و گسترش یافته به دست آوردیم و به شما امکان می دهیم بدون تغییر کد موجود ، اعلان های جدید را اضافه کنید. استفاده از ناظر پیش فرض، ترکیب شده با تزریق وابستگی بهار، به ما کمک می کند تا یک کد هماهنگ با اصول جامد ، بهبود قابلیت آزمایش ، نگهداری و مقیاس پذیری برنامه

اگر این محتوا را دوست داشتید ، آن را با سایر توسعه دهندگان به اشتراک بگذارید و به گسترش شیوه های خوب در توسعه جاوا کمک کنید! 💡

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا