Clean Architecture Clean Architecture in bengali Software Architecture

রিপোজিটরি (Repository): আপনার লজিক ও ডাটার মধ্যে সেতুবন্ধন | পার্ট ০৪

January 28, 2026 · khokanuzzamankhokan@gmail.com

রিপোজিটরি (Repository): আপনার লজিক ও ডাটার মধ্যে সেতুবন্ধন | পার্ট ০৪

রিপোজিটরি (Repository): আপনার লজিক ও ডাটার মধ্যে সেতুবন্ধন

ক্লিন আর্কিটেকচার সিরিজের প্রথম তিনটি পর্বে আমরা এনটিটি এবং ইউজ কেস নিয়ে বিস্তারিত আলোচনা করেছি। আজ আমরা শিখবো এই আর্কিটেকচারের সবচাইতে গুরুত্বপূর্ণ ব্রিজ বা সেতুবন্ধন—Clean Architecture Repository

অনেকেই প্রশ্ন করেন, “ভাই, ইউজ কেস তো বুঝলাম, কিন্তু ডাটা আসবে কোথা থেকে?” উত্তর হলো—ডাটা আসবে ডাটা সোর্স থেকে, কিন্তু সেই ডাটা ইউজ কেস পর্যন্ত পৌঁছে দেবে রিপোজিটরি।

রিপোজিটরি আসলে কী?

রিপোজিটরি হলো একটি ‘গেটওয়ে’ যা আপনার ডোমেইন লেয়ার (Business Logic) এবং ডাটা লেয়ারের (External World) মধ্যে সমন্বয় করে। এটি মূলত একটি ইন্টারফেস যা বলে দেয়—”আমার এই ডাটা দরকার, কিন্তু তুমি কোথা থেকে আনবে সেটা আমার দেখার বিষয় না।”

ডোমেইন লেয়ারে ইন্টারফেস কেন রাখা জরুরি?

এটি ক্লিন আর্কিটেকচারের সবচাইতে টেকনিক্যাল পার্ট। ডোমেইন লেয়ারে আমরা সরাসরি কোড না লিখে শুধু ইন্টারফেস (Abstract Class) কেন রাখি? এর পেছনে রয়েছে Dependency Inversion Principle (DIP)

১. ডিপেন্ডেন্সি রুল মানা: ক্লিন আর্কিটেকচারের নিয়ম হলো—ভেতরের লেয়ার বাইরের লেয়ারকে চিনবে না। আপনি যদি ডাটা লেয়ারের ক্লাস সরাসরি ডোমেইন লেয়ারে ব্যবহার করেন, তবে আপনার ‘হার্ট’ বাইরের জগতের ওপর ডিপেন্ডেন্ট হয়ে পড়ে। ইন্টারফেস ব্যবহারের ফলে ডোমেইন লেয়ার সম্পূর্ণ স্বাধীন থাকে।

২. প্লাগ-অ্যান্ড-প্লে সুবিধা: আজ আপনি ডাটা আনছেন REST API থেকে। কাল যদি কোম্পানি বলে ডাটাবেস বদলে ‘Firebase’ ব্যবহার করবে, তবে আপনাকে আপনার ইউজ কেস বা বিজনেস লজিক এক চুলও চেঞ্জ করতে হবে না। আপনি শুধু নতুন একটা ইমপ্লিমেন্টেশন ক্লাস বানাবেন।

৩. টেস্ট্যাবিলিটি: ইন্টারফেস থাকলে আপনি খুব সহজেই একটি Mock Repository তৈরি করে ফেক ডাটা দিয়ে আপনার লজিক টেস্ট করতে পারবেন। এর জন্য আপনার আসল ইন্টারনেট বা ডাটাবেস কানেকশন লাগবে না।

প্র্যাকটিক্যাল কোড ইমপ্লিমেন্টেশন

চলুন দেখি Clean Architecture Repository-তে কীভাবে ইন্টারফেস এবং ইমপ্লিমেন্টেশন আলাদা করা হয়।

ধাপ ১: ডোমেইন লেয়ারে ইন্টারফেস (The Contract)

এটি একটি ‘চুক্তি’। ডোমেইন লেয়ার বলছে তার এই মেথডটি দরকার।

// Domain Layer: repository/user_repository.dart
abstract class UserRepository {
  Future<UserEntity> getUserProfile(String userId);
}

ধাপ ২: ডাটা লেয়ারে ইমপ্লিমেন্টেশন (The Implementation)

এখানে ডাটা লেয়ার সেই চুক্তিতে সই করছে এবং মেথডটির আসল কাজ (API Call) সম্পন্ন করছে।

// Data Layer: repositories/user_repository_impl.dart
class UserRepositoryImpl implements UserRepository {
  final RemoteDataSource remoteDataSource;
  
  UserRepositoryImpl(this.remoteDataSource);

  @override
  Future<UserEntity> getUserProfile(String userId) async {
    // এখানে এপিআই থেকে ডাটা আসবে
    return await remoteDataSource.fetchUser(userId);
  }
}

সারকথা

Clean Architecture Repository আপনার অ্যাপকে দেয় এক অনন্য স্বাধীনতা। ইন্টারফেস ডোমেইন লেয়ারে রাখার ফলে আপনার বিজনেস লজিক থাকে সুরক্ষিত এবং ডাটা লেয়ার থাকে ফ্লেক্সিবল। এটাই একজন প্রফেশনাল সফটওয়্যার ইঞ্জিনিয়ারের সাইন।

পরবর্তী পর্বে আমরা কথা বলবো Data Sources নিয়ে, যেখানে আমরা দেখবো কীভাবে এপিআই কল বা লোকাল ডাটাবেস হ্যান্ডেল করতে হয়।

ডিপেন্ডেন্সি ইনভার্সন সম্পর্কে আরও জানতে এই আর্টিকেলটি দেখতে পারেন।

Share:

One response to “রিপোজিটরি (Repository): আপনার লজিক ও ডাটার মধ্যে সেতুবন্ধন | পার্ট ০৪”

Leave a Reply

Your email address will not be published. Required fields are marked *