NHibernate তে Interceptor একটি খুব শক্তিশালী কৌশল যা ডেটাবেস অপারেশনগুলির (যেমন, Save, Update, Delete) উপর পর্যবেক্ষণ এবং কাস্টমাইজেশন করতে সাহায্য করে। আপনি যখন NHibernate তে Interceptor ব্যবহার করেন, তখন আপনি ট্রানজেকশনগুলির মধ্যে কোড এক্সিকিউশন ট্র্যাক করতে পারেন এবং ডেটাবেস অপারেশনগুলির আচরণ পরিবর্তন করতে পারেন।
এখানে Interceptor Class তৈরি এবং ব্যবহার করার পদ্ধতি আলোচনা করা হবে।
Interceptor Class কি?
Interceptor হল একটি কাস্টম ক্লাস যা NHibernate এর ডেটাবেস অপারেশনগুলির মধ্যস্থতাকারী হিসেবে কাজ করে। এটি NHibernate এর বিভিন্ন ইভেন্টের উপর হুক প্রস্তাব করে, যেমন:
- Entity এর Save অথবা Update আগে বা পরে কিছু কাজ করা।
- Delete অপারেশন চলাকালে ডেটা পর্যবেক্ষণ করা।
- Entity লোড বা ফেচ করার সময় কাস্টম কার্যক্রম পরিচালনা করা।
এটি মূলত NHibernate এর Event Listeners বা Hooks এর মত কাজ করে।
Interceptor Class তৈরি
NHibernate Interceptor তৈরি করতে হলে আপনাকে NHibernate.Interceptor ক্লাস থেকে Custom Interceptor তৈরি করতে হবে এবং ঐ ক্লাসে প্রয়োজনীয় Override মেথডগুলো ডিফাইন করতে হবে।
ধরা যাক, আমরা একটি Interceptor তৈরি করব যা Entity Save এর আগে লগিং করবে।
Custom Interceptor তৈরি
using NHibernate;
using NHibernate.Interceptor;
using System;
public class MyCustomInterceptor : EmptyInterceptor
{
public override bool OnSave(object entity, object id, string entityName, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
if (entity is Employee employee)
{
Console.WriteLine($"Saving Employee: {employee.Name}, Age: {employee.Age}");
}
// Proceed with the actual save
return base.OnSave(entity, id, entityName, state, propertyNames, types);
}
public override bool OnUpdate(object entity, object id, string entityName, object[] currentState, object[] previousState, string[] propertyNames, NHibernate.Type.IType[] types)
{
if (entity is Employee employee)
{
Console.WriteLine($"Updating Employee: {employee.Name}, Age: {employee.Age}");
}
// Proceed with the actual update
return base.OnUpdate(entity, id, entityName, currentState, previousState, propertyNames, types);
}
public override bool OnDelete(object entity, object id, string entityName, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
if (entity is Employee employee)
{
Console.WriteLine($"Deleting Employee: {employee.Name}, Age: {employee.Age}");
}
// Proceed with the actual delete
return base.OnDelete(entity, id, entityName, state, propertyNames, types);
}
}
এখানে:
- OnSave, OnUpdate, এবং OnDelete মেথডগুলো ব্যবহার করা হয়েছে, যা যথাক্রমে Entity সেভ, আপডেট, এবং ডিলিট করার সময় কাস্টম কোড এক্সিকিউট করতে সাহায্য করে।
base.OnSave()বাbase.OnUpdate()কল করার মাধ্যমে আসল NHibernate অপারেশন সম্পন্ন হতে দেওয়া হয়, অর্থাৎ আমরা আগে কিছু প্রক্রিয়া চালিয়ে তারপর আসল অপারেশনটি হতে দিচ্ছি।
Interceptor ব্যবহার করা
একটি Interceptor ব্যবহার করার জন্য আপনাকে NHibernate সেশন তৈরি করার সময় এটি কনফিগার করতে হবে। নিম্নলিখিত কোডে MyCustomInterceptor ব্যবহার করার উদাহরণ দেওয়া হল:
using (var session = NHibernateHelper.SessionFactory.OpenSession())
{
// Create a transaction
using (var transaction = session.BeginTransaction())
{
// Add custom interceptor
session.SetInterceptor(new MyCustomInterceptor());
var employee = new Employee
{
Name = "John Doe",
Age = 30
};
session.Save(employee); // This will trigger the OnSave method of the interceptor
transaction.Commit();
}
}
এখানে:
session.SetInterceptor(new MyCustomInterceptor())দিয়ে কাস্টম Interceptor যুক্ত করা হয়েছে।- যখন
session.Save()কল করা হবে, তখন এটি MyCustomInterceptor এরOnSaveমেথডটি কল করবে এবং সেখানে আপনি লগিং বা কোনো অতিরিক্ত কাজ করতে পারবেন।
Common Interceptor Methods
NHibernate এর Interceptor ক্লাসে কয়েকটি সাধারণ মেথড রয়েছে, যেগুলি বিভিন্ন ইভেন্টে হুক করতে ব্যবহৃত হয়। এগুলি হল:
- OnSave: যখন কোনো Entity সেভ করা হয়, তখন এই মেথডটি কল হয়।
- OnUpdate: যখন কোনো Entity আপডেট করা হয়, তখন এই মেথডটি কল হয়।
- OnDelete: যখন কোনো Entity ডিলিট করা হয়, তখন এই মেথডটি কল হয়।
- OnLoad: Entity লোড করার সময় এই মেথডটি কল হয়।
- PreFlush: ট্রানজেকশন কমিট হওয়ার আগে এই মেথডটি কল হয়। সাধারণত ডেটাবেসে পরিবর্তন পাঠানোর আগে কার্যকর হয়।
- PostFlush: ট্রানজেকশন কমিট হওয়ার পরে এই মেথডটি কল হয়।
আপনি এই মেথডগুলোর যেকোনো একটি অথবা একাধিক মেথড override করে কাস্টম লজিক প্রয়োগ করতে পারেন।
Interceptor এর অন্যান্য ব্যবহারের ক্ষেত্র
Interceptor ক্লাসের মাধ্যমে আপনি আরো অনেক ধরনের কাস্টম কার্যক্রম পরিচালনা করতে পারেন, যেমন:
- Logging: Entity সেভ, আপডেট, এবং ডিলিট করার সময় লগ তৈরি করা।
- Audit Trails: Entity এর সমস্ত পরিবর্তন ট্র্যাক করা।
- Security: Entity অপারেশন করার সময় ইউজারের পারমিশন চেক করা।
- Performance Monitoring: ডেটাবেস অপারেশনের পারফরম্যান্স ট্র্যাক করা।
এটি একটি শক্তিশালী টুল যা NHibernate এর আচরণ কাস্টমাইজ এবং পর্যবেক্ষণ করার জন্য ব্যবহৃত হয়।
সারাংশ
Interceptor ব্যবহার করে আপনি NHibernate এর ডেটাবেস অপারেশনগুলির আচরণ কাস্টমাইজ করতে পারেন, যেমন সেভ, আপডেট, ডিলিট ইত্যাদি। এটি ডেটাবেসের সাথে ইন্টারঅ্যাকশন করার সময় অতিরিক্ত প্রক্রিয়া, যেমন লগিং, সিকিউরিটি চেক বা অডিট ট্রেইল সংরক্ষণ করার জন্য ব্যবহৃত হয়। Interceptor ব্যবহার করতে NHibernate সেশনে সেট করা হয় এবং এরপর নির্দিষ্ট ইভেন্টের সাথে সম্পর্কিত কাস্টম কোড এক্সিকিউট করা হয়।
Read more