Clean Architecture Clean Architecture in bengali Software Architecture

Clean Architecture Data Sources: পার্ট ০৫

February 1, 2026 · khokanuzzamankhokan@gmail.com

Clean Architecture Data Sources: পার্ট ০৫

আমরা এখন আমাদের ক্লিন আর্কিটেকচার সিরিজের মাঝপথে চলে এসেছি। ৫ম পর্বে আমরা আলোচনা করবো Data Sources নিয়ে। এটি হলো আপনার অ্যাপের সেই লেয়ার যা সরাসরি বাইরের জগতের (API বা Database) সাথে কথা বলে।

Data Sources: যখন অ্যাপ বাইরের জগতের সাথে কথা বলে

ক্লিন আর্কিটেকচার সিরিজের আগের পর্বে আমরা রিপোজিটরি নিয়ে আলোচনা করেছি। রিপোজিটরি হলো একটি গেটওয়ে, কিন্তু সেই গেটওয়ে দিয়ে আসলে ডাটাটা আসে কোথা থেকে? আজ আমরা আলোচনা করবো সেই উৎস বা Clean Architecture Data Sources নিয়ে।

Data Sources আসলে কী?

ডেটা সোর্স হলো ডাটা লেয়ারের (Data Layer) একদম শেষ প্রান্ত। এর কাজ হলো কাঁচা ডেটা (Raw Data) সংগ্রহ করা। এই ডেটা আসতে পারে দুটি জায়গা থেকে: ১. Remote Data Source: যখন আমরা ইন্টারনেট ব্যবহার করে কোনো API বা ক্লাউড থেকে ডাটা আনি। ২. Local Data Source: যখন আমরা ফোনের মেমোরি, SQLite, বা Hive ডাটাবেস থেকে ডাটা রিট্রিভ করি।

কেন রিপোজিটরির ভেতরেই API কল করবো না?

অনেকে ভাবতে পারেন, “ভাই, রিপোজিটরি ইমপ্লিমেন্টেশনের ভেতরেই তো http.get() লিখে দেওয়া যায়, আলাদা করে Clean Architecture Data Sources বানানোর দরকার কী?”

এর কারণ হলো Single Responsibility Principle। রিপোজিটরির কাজ হলো সিদ্ধান্ত নেওয়া যে সে ডাটা কি লোকাল থেকে দেখাবে নাকি রিমোট থেকে। আর ডাটা সোর্সের কাজ হলো শুধু ডাটাটা টেনে আনা।

সুবিধাগুলো দেখুন:

  • সহজ পরিবর্তন: আজ আপনি http প্যাকেজ ব্যবহার করছেন, কাল যদি dio বা chopper ব্যবহার করতে চান, আপনাকে শুধু ডাটা সোর্স চেঞ্জ করলেই হবে। আপনার রিপোজিটরি বা ইউজ কেস জানবেও না যে আপনি কি পরিবর্তন করেছেন।
  • ক্লিন টেস্টিং: ডাটা সোর্স আলাদা থাকলে আপনি খুব সহজেই নেটওয়ার্ক এরর বা ডাটাবেস ফেইলিয়র সিমুলেট (Simulate) করতে পারবেন।

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

চলুন দেখি একটি রিমোট ডাটা সোর্স কীভাবে কাজ করে।

ধাপ ১: ইন্টারফেস তৈরি (The Contract)

// Data Layer: data_sources/user_remote_data_source.dart
abstract class UserRemoteDataSource {
  Future<UserModel> getUserFromApi(int id);
}

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

এখানে আমরা আসল এপিআই কল করবো।

// Data Layer: data_sources/user_remote_data_source_impl.dart
class UserRemoteDataSourceImpl implements UserRemoteDataSource {
  final HttpClient client; // যেমন Dio বা Http client
  
  UserRemoteDataSourceImpl(this.client);

  @override
  Future<UserModel> getUserFromApi(int id) async {
    final response = await client.get('https://api.example.com/user/$id');
    
    if (response.statusCode == 200) {
      return UserModel.fromJson(response.data);
    } else {
      throw ServerException(); // নিজস্ব কাস্টম এক্সেপশন
    }
  }
}

সারকথা

Clean Architecture Data Sources আপনার অ্যাপকে দেয় এক অসাধারণ ফ্লেক্সিবিলিটি। এটি আপনার ডাটা হ্যান্ডলিং লজিককে বাকি অ্যাপ থেকে সম্পূর্ণ আলাদা রাখে। এর ফলে আপনার অ্যাপ হয়ে ওঠে আরও রোবাস্ট এবং ফিউচার-প্রুফ।

পরবর্তী পর্বে আমরা কথা বলবো Mappers নিয়ে—কীভাবে ডাটা সোর্স থেকে আসা র ডেটা (Raw Data) আমাদের এনটিটিতে (Entity) সুন্দরভাবে রূপান্তরিত হয়।

ফ্লাটারে নেটওয়ার্কিং নিয়ে আরও জানতে Dio Package Documentation দেখতে পারেন।

Share:

One response to “Clean Architecture Data Sources: পার্ট ০৫”

Leave a Reply

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