আমরা যেহেতু
আমাদের MVC Music Store application টি সম্পূর্ণরূপে Domain Driven Design(DDD) approach follow করে refactor করবো সেহেতু আমরা শুরুতে Domain Driven Design সম্পর্কে স্বল্প পরিসরে আলোচনা করবো-
What is Domain Driven Design (DDD)?
- Domain-Driven Design (DDD) একটি development philosophy যাহা Eric Evans তার Domain-Driven Design: Tackling Complexity in the Heart of Software বইতে define করেছেন।.
- DDD মূলত একটি software development approach যাহা complex ও large scale এর software সমূহ manage করার জন্য design করা হয়েছে।
- DDD approach এ Domain model কে core business concept এর সাথে deeply connecting এর মাধ্যমে complex problem সমূহ handle করা হয় আর এভাবে কোন Software develop করলে উক্ত Softwareটি Domain এর reflection হয়ে যায়।
উপরোক্ত definition এ Domain,
Model, Domain Model কতিপয় buzz word use করা হয়েছে।
এখন আমরা উপরোক্ত buzz word সমূহ সম্পর্কে আলোচনা করবো।
What is a Domain?
যেই field এর জন্য software develop করা হবে উহাই Domain. অন্যভাবে বলা যায় real world এর যেকোনো কিছু যাহার উপর user program apply করে উহাই Software এর Domain.
What is a Model?
একটি abstraction system যাহা একটি domain এর selected aspect সমূহ describe করে এবং domain related problem সমূহ solve করতে use হয়।
Model সম্পর্কে details জানার
জন্য আমরা নীচের example টি দেখি-
Employee class একটি model
যাহা programmatically একজন real employee কে represent
করবে। এক্ষেত্রে
একটি model একজন real employee এর সকল কিছু capture
না ও করতে পারে।
ইহা শুধুমাত্র ততটুকুই capture করবে যতটুকু current context এর জন্য প্রয়োজন।
Same thing এর জন্য এক এক domain এ এক এক ভাবে (আলাদা রকমের) model create করা যায়। এই ক্ষেত্রে model creation completely উক্ত domain এর necessity এর উপর নির্ভরশীল। উদাহরন স্বরূপ Salary department ও Human Resource department একই Employee একই Employee এর model আলাদা রকম ভাবে create করতে পারে।
What is a Domain Model?
একটি specific domain এর জন্য যে model define করা হয় উহাই domain model.
Domain Driven Design এ একটি shared language creation এ focus করা হয় যাহা Ubiquitous Language নামে পরিচিত। ইহার মাধ্যমে efficiently
ও effectively domain problem সমূহ describe করা হয়। এখন আমরা Ubiquitous Language সম্পর্কে বিশদ আলোচনা
করবো-
Ubiquitous
Language:
Developer ও business people দের language ভিন্ন ধরণের হয়। তারা যদিও একই language use করে কথা বলে তথাপি তাদের কথার meaning ক্ষেত্র বিশেষে পুরোপুরি ভিন্ন হয়। Developer গন naturally technical হয় এবং তারা অভ্যাস বসত কথার মাঝে technical term সমূহ ব্যবহার করে যাহা অনেকক্ষেত্রেই Domain expert দের কাছে বোধগম্য নয়।
এই ধরণের সমস্যাবলী এড়ানোর জন্য Ubiquitous Language(UL) introduce করা হয়েছে।
DDD তে Ubiquitous Language মূলত Domain Experts ও technical
guys দের জন্য একটি negotiated common language যাহা ব্যবহার করে উভয়ে same thing
properly বুঝতে সক্ষম হয়। Ubiquitous Language মূলত
business terminology based হয় এবং এক্ষেত্রে technical
terminology avoid করা
হয়।
Ubiquitous Language এর ক্ষেত্রে Domain
expert lead দেন এবং technical people উহা follow করেন। কোন একটি Domain এর Ubiquitous language উন্নতির
জন্য কয়েক সপ্তাহ থেক কয়েক মাস ও লেগে যেতে পারে। যত দিন যাবে তত ইহা refine হতে থাকবে।
Ubiquitous
Language(UL) এর ক্ষেত্রে একটি ব্যপার খেয়াল রাখতে হবে
তা হল Domain
Expert ও User গন
যেভাবে তাদের business concept সমূহ explain করেন
চেষ্টা করতে হবে সেভাবেই তাদের language এ উহা fit করতে।
Some example of Ubiquitous Language:
Ubiquitous
Language সঠিক ভাবে বোঝার জন্য আমরা নিন্মে দুটি
wrong ও correct example দেখব-
Example 01:
এই Example এ আমরা real life perspective এ Wrong ও Correct Ubiquitous Language
কি রকম হতে পারে তা দেখব-
Wrong Language:
ছোট bed room সমূহের length ও width ratio 4:3 হবে।
Correct Language:
Children's
bed room সমূহের length হবে 20 ft এবং width হবে 15 ft
Note: Building এর owner এর কাছে ছোট bed room, ratio ইত্যাদি technical term হতে পারে যাহা তার জন্য বুঝতে সমস্যা হতে পারে তাই
যদি children's room, guest room, living room etc ব্যবহার করা হয় তবে সে খুব সহজেই
বুঝতে পারবে।
এছাড়া ratio অনুযায়ী হিসাব এর থেকে explicit measurement তার জন্য খুবই meaningful হবে।
Example 02:
এই Example এ আমরা software perspective এ Wrong ও Correct Ubiquitous Language
কি রকম হতে পারে তা দেখব-
Wrong language:
Search
more relevant করার জন্য আমরা search functionalityতে sql
server এর inflectional ও
thesaurus feature consider করব। এছাড়া search more accurate করার জন্য stop word সমূহ exclude করে দেব।
যেহেতু অনেক ক্ষেত্রেই আমাদের domain expert একজন technical person না ও
হতে পারেন সেক্ষেত্রে তার কাছে “Inflectional”,
“Thesaurus”, “Stop word” ইত্যাদি শব্দ সমূহ বুঝতে সমস্যা হবে।
Correct language:
Search functionality তে আমরা search phrase এর synonyms সমূহ consider করবো যাহাতে searching এর সময় relevant results সমূহও exclude না হয়। এছাড়া আমরা search word সমুহকে ইহার
number (singular বা
plural), tense, participle etc দ্বারা differentiate করবো না ফলে
result আরও accurate হবে। আমরা যেকোনো ধরণের noise words সমূহ search perspectiveএ যাহাদের কোন value নাই এই রকম word সমূহ আমরা ignore করব। “am”, “but”, “where”, “about” ইত্যাদি এই ধরণের noise word হতে পারে।
উপরোক্ত Example দ্বয় থেকে আমরা দেখতে পাই যে correct language এর মাধ্যমে Technical team ও domain experts গন খুব সহজেই same way তে একটি ব্যপার চিন্তা করতে ও বুঝতে পারেন।