Services এবং Repositories হল .NET MAUI বা অন্য কোন .NET অ্যাপ্লিকেশনে ডেটা অ্যাক্সেস এবং লজিক ব্যবস্থাপনা করতে ব্যবহৃত সাধারণ ডিজাইন প্যাটার্ন। তারা অ্যাপ্লিকেশনের কোডকে আরও পরিষ্কার এবং টেস্টযোগ্য করতে সাহায্য করে, যাতে বিজনেস লজিক এবং ডেটা অ্যাক্সেস আলাদা রাখা যায়।
Services
Service একটি ক্লাস যা অ্যাপ্লিকেশনের বিজনেস লজিক ধারণ করে। এটি সাধারণত ডেটা প্রসেসিং, ব্যবহারকারী যাচাই, বা অন্য কোন বিজনেস প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয়। Services সাধারণত অ্যাপ্লিকেশনের একাধিক জায়গায় ব্যবহৃত হয় এবং কন্ট্রোলারের সাথে ইন্টারঅ্যাক্ট করে।
Service তৈরি করার উদাহরণ
- ICustomerService Interface:
public interface ICustomerService
{
Task<List<Customer>> GetCustomersAsync();
Task<Customer> GetCustomerByIdAsync(int id);
}
- CustomerService Implementation:
public class CustomerService : ICustomerService
{
private readonly ICustomerRepository _customerRepository;
// Dependency Injection of Repository
public CustomerService(ICustomerRepository customerRepository)
{
_customerRepository = customerRepository;
}
// Get all customers
public async Task<List<Customer>> GetCustomersAsync()
{
return await _customerRepository.GetAllCustomersAsync();
}
// Get customer by id
public async Task<Customer> GetCustomerByIdAsync(int id)
{
return await _customerRepository.GetCustomerByIdAsync(id);
}
}
এখানে:
- ICustomerService একটি ইন্টারফেস যা CustomerService ক্লাসের জন্য বিজনেস লজিক সেবা সরবরাহ করে।
- CustomerService ক্লাসের মধ্যে ডেটা অ্যাক্সেসের জন্য ICustomerRepository নামের একটি Repository ব্যবহার করা হচ্ছে।
Repositories
Repository হল একটি ক্লাস বা ইন্টারফেস যা ডেটাবেস বা অন্যান্য ডেটা সোর্সের সাথে যোগাযোগ করে এবং ডেটা অ্যাক্সেস অপারেশনগুলি সম্পাদন করে। এটি ডেটা অ্যাক্সেস লজিককে পরিষ্কার এবং পুনঃব্যবহারযোগ্য রাখতে সাহায্য করে।
Repository তৈরি করার উদাহরণ
- ICustomerRepository Interface:
public interface ICustomerRepository
{
Task<List<Customer>> GetAllCustomersAsync();
Task<Customer> GetCustomerByIdAsync(int id);
}
- CustomerRepository Implementation:
public class CustomerRepository : ICustomerRepository
{
private readonly DbContext _context;
// Constructor injection for DbContext
public CustomerRepository(DbContext context)
{
_context = context;
}
// Get all customers
public async Task<List<Customer>> GetAllCustomersAsync()
{
return await _context.Customers.ToListAsync();
}
// Get customer by id
public async Task<Customer> GetCustomerByIdAsync(int id)
{
return await _context.Customers.FindAsync(id);
}
}
এখানে:
- ICustomerRepository একটি ইন্টারফেস যা ডেটা অ্যাক্সেসের জন্য প্রয়োজনীয় মেথডগুলো ডিফাইন করে।
- CustomerRepository ক্লাস ডেটাবেস থেকে ডেটা আনার জন্য DbContext ব্যবহার করে। এটি অ্যাসিঙ্ক্রোনাস অপারেশনগুলো সম্পাদন করে।
Dependency Injection (DI) Setup
.NET MAUI অ্যাপ্লিকেশনে Dependency Injection (DI) ব্যবহার করে Services এবং Repositories সরবরাহ করা হয়। .NET MAUI তে DI কনফিগার করা সহজ এবং এটি অ্যাপ্লিকেশনের বিভিন্ন অংশে পরিষ্কারভাবে ডিপেনডেন্সি ইনজেকশন করতে সাহায্য করে।
- App.xaml.cs তে DI কনফিগারেশন:
public partial class App : Application
{
public App()
{
InitializeComponent();
// Registering services and repositories
DependencyService.Register<ICustomerService, CustomerService>();
DependencyService.Register<ICustomerRepository, CustomerRepository>();
MainPage = new MainPage();
}
}
এখানে:
- DependencyService.Register ব্যবহার করে সিস্টেমে CustomerService এবং CustomerRepository ক্লাসগুলো রেজিস্টার করা হয়েছে, যাতে এটি অ্যাপ্লিকেশনের যেকোনো স্থানে সহজে ইনজেক্ট করা যায়।
ব্যবহার করা:
MainPage.xaml.cs এর মধ্যে CustomerService ইনজেক্ট করে ব্যবহার করা:
public partial class MainPage : ContentPage
{
private readonly ICustomerService _customerService;
public MainPage(ICustomerService customerService)
{
InitializeComponent();
_customerService = customerService;
}
protected override async void OnAppearing()
{
base.OnAppearing();
// Get all customers
var customers = await _customerService.GetCustomersAsync();
// Use customers data here
}
}
এখানে:
- ICustomerService ইনজেক্ট করে CustomerService ব্যবহার করা হয়েছে। OnAppearing মেথডে GetCustomersAsync মেথড কল করা হয়েছে।
সারাংশ:
- Service এবং Repository প্যাটার্নগুলি .NET MAUI অ্যাপ্লিকেশনে বিজনেস লজিক এবং ডেটা অ্যাক্সেস লজিকের মধ্যে পরিষ্কার বিভাজন তৈরি করতে সাহায্য করে। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং টেস্টেবিলিটি উন্নত করতে সহায়তা করে।
- Service ক্লাসটি বিজনেস লজিক পরিচালনা করে, আর Repository ক্লাসটি ডেটাবেস বা অন্য কোনো ডেটা সোর্সের সাথে যোগাযোগ করে।
- Dependency Injection ব্যবহার করে সহজেই সেবা এবং রিপোজিটরি ক্লাসগুলোকে ইনজেক্ট করা যায়, যা ডেভেলপারদের কোড লিখতে আরও পরিষ্কার এবং সহজ করে তোলে।
Read more