আমি ডোমেন-ড্রাইভড ডিজাইন (ডিডিডি) এর ধারণাগুলিতে ডুব দিচ্ছি এবং বিশেষত ডোমেন এবং অধ্যবসায়ের মডেলকে বিচ্ছিন্ন করার বিষয়ে কিছু নীতিগুলি অদ্ভুত বলে মনে করেছি। এখানে আমার বোধগম্যতা:
- অ্যাপ্লিকেশন স্তরের একটি পরিষেবা (একটি বৈশিষ্ট্য সেট সরবরাহ করে) কোনও রেপোজিটরি থেকে ডোমেন অবজেক্টগুলিকে অনুরোধ করে যাতে এটির কার্য সম্পাদন করা প্রয়োজন।
- এই ভাণ্ডারটির কংক্রিট বাস্তবায়ন স্টোরেজ থেকে ডেটা এনেছে যার জন্য এটি প্রয়োগ করা হয়েছিল
- পরিষেবাটি ডোমেন অবজেক্টকে বলে, যা ব্যবসায় যুক্তি সংযুক্ত করে, এমন কিছু কার্য সম্পাদন করে যা তার অবস্থার পরিবর্তন করে।
- পরিষেবাটি পরিবর্তিত ডোমেন অবজেক্টটি অবিরত রাখতে সংগ্রহস্থলকে বলে।
- সঞ্চয়স্থানে ডোমেন অবজেক্টটিকে স্টোরেজে সম্পর্কিত প্রতিনিধিত্ব করতে ম্যাপ করতে হবে।
এখন, উপরের অনুমানগুলি দেওয়া, নিম্নলিখিতগুলি বিশ্রী মনে হচ্ছে:
বিজ্ঞাপন 2 .:
ডোমেন মডেলটি পুরো ডোমেন অবজেক্টটিকে (সমস্ত ক্ষেত্র এবং রেফারেন্স সহ) লোড করবে বলে মনে হচ্ছে, এমনকি যদি এটির অনুরোধ করা ফাংশনের জন্য তাদের প্রয়োজন না হয়। অন্যান্য ডোমেন অবজেক্টগুলি রেফারেন্স করা থাকলে পুরোপুরি লোড করা সম্ভব নাও হতে পারে, যদি না আপনি সেই ডোমেন অবজেক্টগুলিকে এবং তারা যে সমস্ত অবজেক্টগুলিকে রেফারেন্স দেয় এবং লোড না করে এবং ততক্ষণ চালিয়ে যায়। অলস লোডিংয়ের বিষয়টি মাথায় আসে, এর অর্থ হল যে আপনি আপনার ডোমেন অবজেক্টগুলি অনুসন্ধান করা শুরু করছেন যা প্রথমে সংগ্রহস্থলের দায়িত্ব হওয়া উচিত।
এই সমস্যাটি দেওয়া, ডোমেন অবজেক্টগুলি লোড করার "সঠিক" পদ্ধতিতে প্রতিটি ব্যবহারের ক্ষেত্রে একটি ডেডিকেটেড লোডিং ফাংশন রয়েছে বলে মনে হচ্ছে। এই উত্সর্গীকৃত ফাংশনগুলি তখন কেবল তাদের জন্য নকশাকৃত ব্যবহারের ক্ষেত্রে প্রয়োজনীয় ডেটা লোড করবে। বিশৃঙ্খলাটি এখানে আসে: এখানে প্রথমে আমাকে সংগ্রহস্থলের প্রতিটি প্রয়োগের জন্য প্রচুর পরিমাণে লোডিং ফাংশন বজায় রাখতে হবে এবং ডোমেন অবজেক্টগুলি null
তাদের ক্ষেত্রগুলি বহনকারী অসম্পূর্ণ রাজ্যে শেষ হবে । পরেরটির প্রযুক্তিগতভাবে সমস্যা হওয়া উচিত নয় কারণ যদি কোনও মান লোড না করা হয় তবে যেভাবে এটির জন্য অনুরোধ করা কার্যকারিতা দ্বারা এটির প্রয়োজন হবে না। তবুও এটি বিশ্রী এবং সম্ভাব্য বিপত্তি।
বিজ্ঞাপন 3 .:
কোনও ডোমেন অবজেক্ট কীভাবে নির্মাণের ক্ষেত্রে স্বতন্ত্রতা বাধার বিষয়টি যাচাই করবে যদি এটির ভাণ্ডারের কোনও ধারণা না থাকে? উদাহরণস্বরূপ, আমি যদি User
একটি অনন্য সামাজিক সুরক্ষা নম্বর (যা দেওয়া হয়) দিয়ে একটি নতুন তৈরি করতে চাইতাম , তবে প্রাথমিকভাবে দ্বন্দ্বটি সংগ্রহস্থলটিকে অবজেক্টটি সংরক্ষণ করতে বলার পরে ঘটবে, কেবলমাত্র যদি ডাটাবেসে কোনও স্বতন্ত্রতা বাধা থাকে। অন্যথায়, আমি User
প্রদত্ত সামাজিক সুরক্ষা সহ একটি সন্ধান করতে এবং একটি নতুন তৈরি করার আগে, এটি উপস্থিত থাকলে কোনও ত্রুটিটি রিপোর্ট করতে পারি। তবে তখন সীমাবদ্ধ চেকগুলি পরিষেবাতে থাকবে এবং তারা যেখানে ডোমেন অবজেক্টে থাকবে না। আমি কেবল বুঝতে পেরেছি যে ডোমেন অবজেক্টগুলিকে বৈধতার জন্য খুব ভালভাবে (ইনজেকশনের) সংগ্রহস্থলগুলি ব্যবহারের অনুমতি দেওয়া হয়।
বিজ্ঞাপন 5 .:
আমি ডোমেন অবজেক্টগুলিকে সরাসরি আন্ডারলিংয়ের ডেটা সংশোধন করার তুলনায় একটি কার্য-নিবিড় প্রক্রিয়া হিসাবে একটি স্টোরেজ ব্যাকএন্ডে ডোমেন অবজেক্টগুলির ম্যাপিংটি উপলব্ধি করি। অবশ্যই, এটি ডোমেন কোড থেকে কংক্রিট স্টোরেজ বাস্তবায়ন ডিক্লুপ করার জন্য একটি প্রয়োজনীয় শর্ত। যাইহোক, সত্যিই কি এটি এত উচ্চ ব্যয় হয়?
আপনার জন্য ম্যাপিং করতে স্পষ্টতই আপনার কাছে ORM সরঞ্জামগুলি ব্যবহার করার বিকল্প রয়েছে। এগুলির জন্য আপনাকে সাধারণত ওআরএমের বিধিনিষেধ অনুসারে ডোমেন মডেলটি ডিজাইন করার প্রয়োজন হয়, বা এমনকি ডোমেন থেকে পরিকাঠামো স্তরতে নির্ভরতা প্রবর্তন করে (উদাহরণস্বরূপ ডোমেন অবজেক্টগুলিতে ওআরএম টীকা ব্যবহার করে)। এছাড়াও আমি পড়েছি যে ওআরএমগুলি একটি যথেষ্ট পরিমাণে গণনামূলক ওভারহেড প্রবর্তন করে।
নোএসকিউএল ডাটাবেসের ক্ষেত্রে, যার জন্য খুব কমই কোনও ওআরএম-জাতীয় ধারণা বিদ্যমান, আপনি কীভাবে ডোমেন মডেলগুলিতে কোন বৈশিষ্ট্য পরিবর্তিত হয়েছিলেন তা ট্র্যাক করবেন save()
?
সম্পাদনা : এছাড়াও, ডোমেন অবজেক্টের স্থিতি (যেমন প্রতিটি ক্ষেত্রের মান) অ্যাক্সেসের জন্য কোনও সংগ্রহস্থলের জন্য, ডোমেন অবজেক্টটির অভ্যন্তরীণ অবস্থা প্রকাশ করতে হবে যা এনক্যাপসুলেশনটি ভেঙে দেয়।
সাধারণভাবে:
- লেনদেনের যুক্তি কোথায় যাবে? এটি অবশ্যই দৃistence়তা নির্দিষ্ট। কিছু স্টোরেজ অবকাঠামো এমনকি লেনদেনকে মোটেই সমর্থন করে না (যেমন মেমরি মক রিপোজিটরিগুলি)।
- একাধিক অবজেক্টগুলিকে সংশোধনকারী বাল্ক অপারেশনের জন্য, আমাকে কি প্রতিটি বস্তু পৃথকভাবে লোড, সংশোধন এবং সংরক্ষণ করতে হবে যাতে অবজেক্টের এনক্যাপসুলেটেড বৈধতা যুক্তির মাধ্যমে যেতে হবে? এটি সরাসরি ডাটাবেসে একটি একক ক্যোয়ারী কার্যকর করার বিরোধিতা করে।
আমি এই বিষয়ে কিছু স্পষ্টির প্রশংসা করব। আমার অনুমানগুলি কি সঠিক? যদি তা না হয় তবে এই সমস্যাগুলি মোকাবেলার সঠিক উপায় কী?