সমস্যার জায়গার একটি সংক্ষিপ্ত পর্যালোচনা দিয়ে এটি শুরু করা যাক: ডিডিডি-র অন্যতম প্রধান প্রিন্সিপাল হ'ল ব্যবসায়ের নিয়মগুলি যতটা সম্ভব নিবিড়ভাবে স্থান দেওয়া যেখানে তাদের প্রয়োগ করা দরকার। এটি একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা কারণ এটি আপনার সিস্টেমকে আরও "সংহত" করে তোলে। নিয়মের "উপরের দিকে" সরানো সাধারণত রক্তাল্পতার মডেলের লক্ষণ; যেখানে বস্তুগুলি কেবলমাত্র ডেটা ব্যাগ থাকে এবং নিয়মগুলি প্রয়োগ করা হয় সেই ডেটা দিয়ে with
একটি অ্যানিমিক মডেল বিকাশকারীদের কেবলমাত্র ডিডিডি দিয়ে শুরু করে প্রচুর পরিমাণে বোঝাতে পারে। আপনি একটি User
মডেল এবং একটি তৈরি করেন EmailMustBeUnqiueRule
যা ইমেলটিকে বৈধতা দেওয়ার জন্য প্রয়োজনীয় তথ্যের সাথে ইনজেকশন দেয়। সহজ। মার্জিত। বিষয়টি হ'ল এই "ধরণের" চিন্তাভাবনা প্রকৃতির মূলগত পদ্ধতিগত। ডিডিডি নয়। যেটি ঘটতে পারে তা হ'ল আপনার কাছে কয়েক ডজন Rules
ঝরঝরে আবৃত এবং আবদ্ধ থাকা একটি মডিউল রেখে দেওয়া হয়েছে , তবে তারা যে বিন্দুতে পরিবর্তন করতে পারবেন না সে প্রসঙ্গে পুরোপুরি বর্জিত কারণ তারা কখন / কোথায় প্রয়োগ করা হবে তা পরিষ্কার নয়। যে জানার জন্য? এটি স্ব-স্পষ্ট হতে পারে যে একটি EmailMustBeUnqiueRule
তৈরির ক্ষেত্রে প্রয়োগ করা হবে User
তবে কী হবে UserIsInGoodStandingRule
? আস্তে আস্তে কিন্তু অবশ্যই, নিষ্কাশন এর দানাদারRules
তাদের প্রেক্ষাপটের বাইরে আপনাকে এমন একটি সিস্টেম দেয় যা বোঝা শক্ত (এবং এভাবে পরিবর্তন করা যায় না)। যখন প্রকৃত ক্রাঞ্চিং / এক্সিকিউশনটি এত ভার্ভোজ হয় যে আপনার মডেলটি ফোকাসটি আলগা করতে শুরু করে তখনই নিয়মগুলি এনক্যাপসুলেটেড হওয়া উচিত।
এখন আপনার সুনির্দিষ্ট প্রশ্নে: ফেলে Service
/ CommandHandler
ফেলে দেওয়ার Exception
বিষয়টি হ'ল আপনার ব্যবসায়িক যুক্তিটি আপনার ডোমেনের বাইরে ("উপরের দিকে") ফাঁস হতে শুরু করেছে। আপনার Service
/ CommandHandler
ইমেলটি কেন অনন্য হতে হবে তা জানতে হবে? অ্যাপ্লিকেশন পরিষেবা স্তরটি সাধারণত প্রয়োগের পরিবর্তে সমন্বয়ের জন্য ব্যবহৃত হয়। যদি আমরা ChangeEmail
আপনার সিস্টেমে কোনও পদ্ধতি / কমান্ড যুক্ত করি তবে এর কারণটি চিত্রিত করা যেতে পারে । এখন দুটি পদ্ধতি / কমান্ড হ্যান্ডলারদের আপনার অনন্য চেক অন্তর্ভুক্ত করতে হবে। এখানেই কোনও বিকাশকারীকে "এক্সট্রাক্ট" করার জন্য প্রলুব্ধ করা যেতে পারে EmailMustBeUniqueRule
। উপরে বর্ণিত হিসাবে, আমরা সেই পথে যেতে চাই না।
কিছু অতিরিক্ত জ্ঞানের ক্রাঞ্চিং আমাদের আরও ডিডিডি উত্তরের দিকে নিয়ে যেতে পারে। কোনও ইমেলের স্বতন্ত্রতা হ'ল একটি আক্রমণকারী যা অবশ্যই User
অবজেক্টগুলির সংগ্রহ জুড়ে প্রয়োগ করতে হবে । আপনার ডোমেনে এমন কোনও ধারণা আছে যা " User
অবজেক্টের সংগ্রহ " উপস্থাপন করে? আমি মনে করি আপনি এখানে দেখতে যাচ্ছেন সম্ভবত আপনি দেখতে পারবেন।
এই নির্দিষ্ট ক্ষেত্রে (এবং আরও অনেকগুলি সংগ্রহ জুড়ে আক্রমণকারীদের জড়িত জড়িত) এর জন্য এই যুক্তিটি বাস্তবায়নের জন্য সেরা স্থানটি আপনার মধ্যে থাকবে Repository
। এটি বিশেষত সুবিধাজনক কারণ আপনার Repository
ধরণের বৈধতা (ডেটা স্টোর) চালানোর জন্য প্রয়োজনীয় অবকাঠামোটির অতিরিক্ত অংশটি "জানে"। আপনার ক্ষেত্রে, আমি add
পদ্ধতিতে এই চেকটি রাখব । এই বোধ ঠিক আছে? ধারণামূলকভাবে, এটি এই পদ্ধতিটি সত্যই User
আপনার সিস্টেমে একটি যুক্ত করে। ডেটা স্টোর একটি বাস্তবায়ন বিশদ।