logo

SOA এবং DDD এর মধ্যে পার্থক্য কি?

Q:
SOA and DDD এর পার্থক্য কি?

SOA

SOA বা Service Oriented Architecture হচ্ছে যখন কোন সিস্টেমের ফিচার সমূহকে বিভিন্ন কম্পোনেন্টে অর্থাৎ আলাদা সার্ভিসে ভাগ করে সিস্টেমটি তৈরি করা হয়। প্রতিটি সার্ভিস একে অপরের সাথে very loosely coupled অর্থাৎ একটি সার্ভিস আরেকটি সার্ভিস থেকে স্বাধীন এবং এই সার্ভিসগুলো নিজেদের মধ্যে communication করার জন্য কিছু contract (Interface) বা definition (নিয়ম) মেনে চলে। একটি সার্ভিস বাসের মাধ্যমে সকল সার্ভিসগুলো সিস্টেমে ইন্টিগ্রেট থাকে এবং এই সার্ভিস বাসের মাধ্যমে সিস্টেমের ব্যবহারকারী সার্ভিসগুলো ব্যবহার করতে পারে। আলাদা আলাদা টিম এই সার্ভিসগুলোর দায়িত্বে থাকে।

উদাহরণস্বরূপ টুইটারে গেলে আমরা ফিডে লেটেস্ট টুইট গুলো দেখতে পাই। আবার সাইডবারে ট্রেন্ডিং টপিকে বর্তমানে যে টপিক গুলো জনপ্রিয় সেগুলো দেখান হয়। SOA তে লেটেস্ট টুইট দেখানোর জন্য আমরা একটি সার্ভিস তৈরি করতে পারি আবার ট্রেন্ডিং টপিক এর জন্য আরেকটি সার্ভিস। ট্রেন্ডিং টপিকের সাথে যেহেতু লেটেস্ট টুইটের কোনও সম্পর্ক নেই অর্থাৎ ট্রেন্ডিং টপিক টুইট ফিডের উপর নির্ভরশীল নয় তাই আমরা এটিকে আলাদা একটি সার্ভিস হিসেবে তৈরি করতে পারি। আবার ধরুন আমরা চাচ্ছি ইউজারের লোকেশনের উপর ভিত্তি করে ট্রেন্ডিং টপিক দেখাতে চাচ্ছি। এখত্রে আমরা লোকেশন সার্ভিস তৈরি করতে পারি যা ইউজারের লোকেশন জানাবে। চাইলে এটি আমরা নিজে তৈরি না করে বরং কোন থার্ড পার্টি সার্ভিস ইউজ করে এটি করতে পারি। ট্রেন্ডিং টপিক সার্ভিস চিন্তা করে না লোকেশন সার্ভিস কিভাবে ইউজারের লোকেশন হিসাব করে বরং তার শুধু ইউজারের লোকেশন জানলেই হল এবং এই দুই সার্ভিস একটি ডেফিনিশন লিস্ট বা ইন্টারফেইস অনুযায়ী কমিউনিকেট করে।

DDD

Domain হচ্ছে কোন একটি নির্দিষ্ট কাজের ক্ষেত্র বা জায়গা, সফটওয়ারের ক্ষেত্রে আমরা যে ব্যবসার জন্য সফটওয়্যার তৈরি করছি সেই ব্যবসা সংক্রান্ত যত কর্মকাণ্ড আছে সেগুলো ওই ব্যবসার domain এর অন্তর্ভুক্ত। যেমন আমরা যদি একটি হোটেলের জন্য কোন সফটওয়ার তৈরি করি তাহলে হোটেল পরিচালনা সংক্রান্ত সকল কার্যক্রম হছে ওই হোটেলটির domain। এখন DDD বা Domain Driven Design এ সফটওয়ার তৈরির ক্ষেত্রে সফটওয়ারের ডিজাইন করা হয় একজন ডোমেইন এক্সপার্ট এর সাহায্য নিয়ে। ডোমেইন এক্সপার্ট হল ওই ব্যবসার সাথে জড়িত এমন কোনও ব্যক্তি যিনি ব্যবসার পরিচালনা সম্পর্কে পর্যাপ্ত ধারনা রাখেন (উদাহরণের হোটেল ব্যবসার ক্ষেত্রে সেই হোটেলের ম্যনেজার একজন ডোমেইন এক্সপার্ট)। DDD এর লক্ষ্য হচ্ছে ওই ডোমেইনের নলেজ বা ব্যবসায়িক নিয়মগুলোকে একটি Ubiquitous Language এর সাহায্যে পরিপূর্ণভাবে কোডে রূপান্তর করা যা ওই ব্যবসায়ের সমস্ত invariants গুলোকে সব সময় মেইনটেইন করে।

Ubiquitous Language: ডেভেলপার এবং বিজনেস শেয়ারহোল্ডারদের মধ্যকার একটি কমন ও সুনির্দিষ্ট ভাষা যা উভয়ের বোধগম্য। যেমন ধরুন আমাদের উদাহরণে হোটেলে আগত সমস্ত ভিজিটরকে গেস্ট বলা হয়। সফটওয়ারের মডেল তৈরির সময় আমরা সেভাবে আমাদের মডেলকে ডিফাইন করব গেস্ট নামে, ইউজার নামে নয়। এ ডেভেলপাররা যে টেকনিকাল টার্ম ইউজ করে থাকে সাধারণত সেগুলো ইউজ করা হবে না বরং বিজনেসের ডে টু ডে কার্যক্রমে যে ভাষা বা টার্ম ইউজ করা হয় সেগুলো ব্যবহার করেই আমাদের সফটওয়ার তৈরি করতে হবে।

Invariant: ব্যবসা সংক্রান্ত নিয়ম যার উপর ব্যবসার লাভ ক্ষতি নির্ভর করে। যেমন মনে করি আমদের হোটেলের একটি নিয়ম হল কেউ যদি দুই দিনের বেশি রুম বুকিং দিতে চায় তবে ৫০% অগ্রিম পরিশোধ করতে হবে। এটি হল এই হোটেলের একটি invariant। যা আমাদের কোডে সঠিকভাবে ইমপ্লিমেন্ট না করলে ব্যবসায়ের আর্থিক ক্ষতি এবং সুনাম ক্ষুণ্ণের কারণ হবে।

SOA হচ্ছে কমপ্লেক্স সিস্টেমের জন্য মেইন্টেনেবল এবং স্কেলেবল সফটওয়ার তৈরি করার একটি আর্কিটেকচারাল প্যাটার্ন, এন্টারপ্রাইজ সিস্টেমের জন্য মনোলিথিক এপ্লিকেশনের সীমাবদ্ধতা সমাধান করার জন্য একটি টেকনিক্যাল অ্যাপ্রোচ আর DDD হচ্ছে বিজনেস শেয়ারহোল্ডার এবং টেকনিক্যাল টিমের মধ্যে কমিনিকেশন গ্যাপ দূর করে বিজনেসের চাহিদা কে কোডে রূপান্তরের মাধ্যমে ব্যবসায়িক লক্ষ্য পরিপূর্ণভাবে অর্জন করার একটি প্রক্রিয়া।

আপনার মন্তব্যঃ
পোস্ট সম্পর্কে আপনার মতামত বা কোন ত্রুটি পেয়ে থাকলে নিচে জানাতে ভুলবেন না।