আমি এমন একটি অ্যাপ্লিকেশন ডিজাইনের চেষ্টা করছি যাটিতে একটি জটিল ব্যবসায়ের ডোমেন রয়েছে এবং একটি REST এপিআই সমর্থন করার প্রয়োজন (কঠোরভাবে REST নয়, তবে সংস্থান-ভিত্তিক)। রিসোর্স-ওরিয়েন্টেড পদ্ধতিতে ডোমেন মডেলটি প্রকাশ করার উপায় নিয়ে আসতে আমার কিছুটা সমস্যা হচ্ছে।
ডিডিডি-তে, কোনও ডোমেন মডেলের ক্লায়েন্টদের সত্তা ও ডোমেন পরিষেবাদি দ্বারা প্রয়োগ করা কোনও ব্যবসায়ের কার্যকারিতা অ্যাক্সেসের জন্য প্রক্রিয়াগত 'অ্যাপ্লিকেশন পরিষেবাগুলি' স্তরটির মধ্য দিয়ে যেতে হবে। উদাহরণস্বরূপ একটি ব্যবহারকারীর সত্তা আপডেট করার জন্য দুটি পদ্ধতি সহ একটি অ্যাপ্লিকেশন পরিষেবা রয়েছে:
userService.ChangeName(name);
userService.ChangeEmail(email);
এই অ্যাপ্লিকেশন পরিষেবাটির API কমান্ডগুলি (ক্রিয়াগুলি, পদ্ধতিগুলি) প্রকাশ করে, রাষ্ট্রকে নয়।
তবে যদি আমাদের একই অ্যাপ্লিকেশনটির জন্য একটি RESTful এপিআই সরবরাহ করতে হয় তবে একটি ব্যবহারকারী সংস্থান মডেল রয়েছে যা দেখতে এটির মতো দেখাচ্ছে:
{
name:"name",
email:"email@mail.com"
}
রিসোর্স-ওরিয়েন্টেড এপিআই কমান্ড নয়, রাষ্ট্রকে প্রকাশ করে । এটি নিম্নলিখিত উদ্বেগ উত্থাপন করে:
একটি REST এপিআই এর বিপরীতে প্রতিটি আপডেট অপারেশন রিসোর্স মডেলটিতে কী কী বৈশিষ্ট্যগুলি আপডেট করা হচ্ছে তার উপর নির্ভর করে এক বা একাধিক অ্যাপ্লিকেশন পরিষেবা পদ্ধতি কলকে ম্যাপ করতে পারে
প্রতিটি আপডেট অপারেশনটি পারমাণবিক থেকে REST এপিআই ক্লায়েন্টের মতো লাগে তবে এটি এর মতো কার্যকর হয় না। প্রতিটি অ্যাপ্লিকেশন পরিষেবা কল পৃথক লেনদেন হিসাবে ডিজাইন করা হয়েছে। রিসোর্স মডেলটিতে একটি ক্ষেত্র আপডেট করা অন্য ক্ষেত্রগুলির জন্য বৈধতা নিয়ম পরিবর্তন করতে পারে। সুতরাং আমাদের সম্ভাব্য অ্যাপ্লিকেশন পরিষেবা কলগুলি শুরু করার আগে তাদের সমস্ত সম্ভাব্য অ্যাপ্লিকেশন পরিষেবা কল বৈধ কিনা তা নিশ্চিত করার জন্য আমাদের সমস্ত সংস্থান মডেল ক্ষেত্রগুলি একত্রে বৈধ করে তোলা দরকার। কমান্ডের সেটকে একবারে যাচাই করা খুব কম তুচ্ছ যে একবারে একটি করে করা। এমন কোনও ক্লায়েন্টে কীভাবে আমরা এটি করতে পারি যা স্বতন্ত্র আদেশগুলিও জানেন না?
অ্যাপ্লিকেশন পরিষেবা পদ্ধতিগুলিকে বিভিন্ন ক্রমে কল করার একটি আলাদা প্রভাব থাকতে পারে, যখন REST API এটিকে দেখে মনে হয় কোনও পার্থক্য নেই (এক উত্সের মধ্যে)
আমি আরও অনুরূপ ইস্যু নিয়ে আসতে পারি, তবে মূলত এগুলি সমস্ত একই জিনিস দ্বারা ঘটে থাকে। অ্যাপ্লিকেশন পরিষেবাতে প্রতিটি কল করার পরে, সিস্টেমের অবস্থার পরিবর্তন হয়। বৈধ পরিবর্তন কীসের নিয়ম, কোনও সত্তা পরবর্তী পরিবর্তন সম্পাদন করতে পারে এমন ক্রিয়াগুলির সেট। একটি রিসোর্স-ওরিয়েন্টেড API এটিকে সমস্তটিকে একটি পারমাণবিক অপারেশনের মতো দেখানোর চেষ্টা করে। তবে এই ব্যবধানটি অতিক্রম করার জটিলতা অবশ্যই কোথাও যেতে হবে এবং এটি বিশাল বলে মনে হচ্ছে।
তদতিরিক্ত, যদি ইউআই আরও কমান্ড-ভিত্তিক হয়, যা প্রায়শই ঘটে থাকে তবে আমাদের ক্লায়েন্ট পক্ষের কমান্ড এবং সংস্থানগুলির মধ্যে মানচিত্র তৈরি করতে হবে এবং তারপরে এপিআই সাইডে ফিরে যেতে হবে।
প্রশ্নাবলী:
- এই সমস্ত জটিলতাটি কি কেবলমাত্র একটি (ঘন) আরএসটি-টু-অ্যাপ্লিকেশন পরিষেবা ম্যাপিং স্তর দ্বারা পরিচালনা করা উচিত?
- বা আমি ডিডিডি / আরএসএসটি সম্পর্কে আমার বোঝার মধ্যে কিছু মিস করছি?
- বিশ্রামটি কি কোনও নির্দিষ্ট (মোটামুটি কম) ডিগ্রি জটিলতায় ডোমেন মডেলগুলির কার্যকারিতা প্রকাশের জন্য ব্যবহারিক হতে পারে না?