Repository প্যাটার্ন কি?
Repository প্যাটার্ন একটি স্ট্রাকচারাল ডিজাইন প্যাটার্ন যা ডেটা অ্যাক্সেস লেয়ারের (ডেটাবেস) এবং অন্যান্য সিস্টেমের মধ্যে একটি অ্যাবস্ট্রাকশন (abstract) তৈরি করে। এটি ডেটাবেস অপারেশন যেমন ইনসার্ট, আপডেট, ডিলিট, এবং সিলেক্ট কার্যাবলি সহজ ও পরিষ্কারভাবে পরিচালনা করতে সহায়তা করে। Repository প্যাটার্ন ডেটাবেস অপারেশনগুলিকে ডোমেইন লজিক থেকে আলাদা করে, ফলে কোডিং আরও মডুলার ও পুনঃব্যবহারযোগ্য হয়।
ডেটাবেস অপারেশনগুলি করার জন্য সাধারণত ডিরেক্ট SQL কোড ব্যবহার করা হয়, কিন্তু Repository প্যাটার্ন ডেটাবেসের সাথে যোগাযোগের জন্য একটি নির্দিষ্ট API সরবরাহ করে, যা ডেটাবেস থেকে ডেটা আনা, সেভ করা, এবং ম্যানিপুলেট করার প্রক্রিয়াকে সহজ করে তোলে।
TypeORM এ Repository প্যাটার্ন
TypeORM এর Repository প্যাটার্ন ডেটাবেসের টেবিলগুলির সাথে কাজ করার জন্য ব্যবহৃত হয়। TypeORM নিজে থেকেই Repository ক্লাস প্রদান করে, যা ডেটাবেস টেবিলের জন্য CRUD (Create, Read, Update, Delete) অপারেশন করতে সহায়তা করে।
Repository প্যাটার্নে, TypeORM Repository ক্লাস এবং DataSource এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করে এবং ডোমেইন এন্টিটির জন্য বিভিন্ন ডেটাবেস অপারেশন সমর্থন করে।
TypeORM এ Repository প্যাটার্নের ব্যবহার
১. Repository তৈরি করা
প্রথমে, আপনি যে Entity তৈরি করেছেন সেটি টাইপওআরএম-এর Repository এর মাধ্যমে ডেটাবেসে কাজ করবে। এই Repository ক্লাসটি ডেটাবেস টেবিলের সাথে সম্পর্কিত সমস্ত CRUD অপারেশন পরিচালনা করে।
ধরা যাক, আপনার একটি User Entity রয়েছে:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
এখন, TypeORM এর Repository ব্যবহার করে এই User Entity তে কাজ করবেন।
২. Repository এর মাধ্যমে ডেটাবেসে কাজ করা
TypeORM Repository কে DataSource থেকে নেয় এবং তারপর এটি ব্যবহার করে CRUD অপারেশন করতে পারবেন।
ডেটাবেস সংযোগ এবং Repository ব্যবহার করা:
import { AppDataSource } from './data-source';
import { User } from './entity/User';
// ডেটাবেসের সংযোগ স্থাপন
AppDataSource.initialize()
.then(async () => {
// Repository ইনস্ট্যান্স তৈরি
const userRepository = AppDataSource.getRepository(User);
// ১. নতুন ইউজার তৈরি করা
const newUser = new User();
newUser.name = 'John Doe';
newUser.email = 'john@example.com';
// ইউজার সেভ করা
await userRepository.save(newUser);
console.log('User has been saved');
// ২. ইউজার খোঁজা
const users = await userRepository.find();
console.log(users);
// ৩. ইউজার আপডেট করা
const userToUpdate = await userRepository.findOneBy({ id: 1 });
if (userToUpdate) {
userToUpdate.name = 'Updated Name';
await userRepository.save(userToUpdate);
console.log('User has been updated');
}
// ৪. ইউজার ডিলিট করা
const userToDelete = await userRepository.findOneBy({ id: 1 });
if (userToDelete) {
await userRepository.remove(userToDelete);
console.log('User has been deleted');
}
})
.catch((error) => console.log(error));
৩. Repository Methods:
find(): এটি টেবিলের সব রেকর্ড নিয়ে আসে।findOne(): এটি একটি নির্দিষ্ট শর্তে একটি রেকর্ড খুঁজে বের করে।save(): এটি ডেটাবেসে নতুন রেকর্ড ইনসার্ট বা আপডেট করে।remove(): এটি ডেটাবেস থেকে একটি রেকর্ড ডিলিট করে।findOneBy(): এটি কোনো শর্ত অনুযায়ী একটি রেকর্ড খুঁজে বের করে।
৪. Custom Repository Methods
আপনি আপনার নিজস্ব Repository Methods তৈরি করতে পারেন, যেগুলি নির্দিষ্ট ডেটাবেস অপারেশনগুলি চালায়। TypeORM এর মাধ্যমে Custom Repository তৈরি করতে @EntityRepository ডেকোরেটর ব্যবহার করা যেতে পারে।
import { EntityRepository, Repository } from 'typeorm';
import { User } from './entity/User';
@EntityRepository(User)
export class UserRepository extends Repository<User> {
// একটি কাস্টম ফাংশন তৈরি
async findByName(name: string): Promise<User[]> {
return this.createQueryBuilder("user")
.where("user.name = :name", { name })
.getMany();
}
}
এখন, এই কাস্টম রেপোজিটরি মেথড findByName ব্যবহার করে আপনি সহজেই নির্দিষ্ট নামের ভিত্তিতে ইউজার খুঁজে বের করতে পারবেন।
const userRepository = AppDataSource.getRepository(UserRepository);
const usersByName = await userRepository.findByName('John Doe');
console.log(usersByName);
কেন Repository প্যাটার্ন ব্যবহার করবেন?
- ডেটাবেস অ্যাক্সেস সহজ: Repository প্যাটার্ন ডেটাবেস অ্যাক্সেসের কাজগুলো ক্লিন এবং সহজ করে তোলে। আপনি সরাসরি SQL লিখতে না করেই CRUD অপারেশন করতে পারেন।
- ডেটাবেস লজিক আবরোধ: Repository প্যাটার্ন ডেটাবেস লজিক এবং অ্যাপ্লিকেশনের লজিককে আলাদা করে, যার ফলে কোডিং আরও মডুলার এবং রিডেবল হয়।
- টেস্টেবিলিটি: Repository প্যাটার্ন ব্যবহারের মাধ্যমে কোডে ইউনিট টেস্টিং করা সহজ হয়ে ওঠে, কারণ ডেটাবেসের সাথে সরাসরি যোগাযোগের পরিবর্তে ফাংশনালিটি টেস্ট করা যায়।
- রিইউজেবল কোড: Repository প্যাটার্ন ফাংশন এবং লজিকের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে, যেহেতু একই Repository কেবল একটি ক্লাস দিয়ে বিভিন্ন টেবিলের সাথে কাজ করতে ব্যবহার করা যেতে পারে।
সারাংশ
Repository প্যাটার্ন একটি প্রোগ্রামিং ডিজাইন প্যাটার্ন যা ডেটাবেসের সাথে যোগাযোগ সহজ এবং কার্যকরী করে তোলে। TypeORM ব্যবহার করে আপনি সহজে Repository প্যাটার্ন প্রয়োগ করতে পারেন এবং ডেটাবেসের বিভিন্ন অপারেশনগুলো (CRUD) পরিচালনা করতে পারেন। এটি কোডের স্বচ্ছতা, রক্ষণাবেক্ষণ এবং স্কেলেবিলিটি বৃদ্ধি করে এবং ডেটাবেসের সাথে যোগাযোগের জন্য একটি সহজ API প্রদান করে। TypeORM এর Repository প্যাটার্ন ব্যবহারের মাধ্যমে ডেটাবেস অপারেশনগুলো আরও মডুলার এবং পুনঃব্যবহারযোগ্য হয়ে ওঠে।