সমৃদ্ধ ডোমেন ক্লাসগুলির সুবিধাগুলির মধ্যে একটি হ'ল আপনি যে কোনও স্তরের কোনও জিনিসের রেফারেন্স রাখার সময় তাদের আচরণ (পদ্ধতিগুলি) বলতে পারবেন। এছাড়াও, আপনি ছোট এবং বিতরণ পদ্ধতিগুলি লিখেছেন যা একসাথে সহযোগিতা করে। রক্তাল্পতা ডোমেন ক্লাসে, আপনি সাধারণত ব্যবহারের ক্ষেত্রে চালিত ফ্যাট পদ্ধতিগত পদ্ধতি (পরিষেবা স্তরে) লেখার ঝোঁক। সমৃদ্ধ ডোমেন ক্লাসগুলির তুলনায় এগুলি সাধারণত কম রক্ষণাবেক্ষণযোগ্য।
আচরণ সহ ডোমেন শ্রেণীর উদাহরণ:
class Order {
String number
List<OrderItem> items
ItemList bonus
Delivery delivery
void addItem(Item item) { // add bonus if necessary }
ItemList needToDeliver() { // items + bonus }
void deliver() {
delivery = new Delivery()
delivery.items = needToDeliver()
}
}
পদ্ধতিটি needToDeliver()বোনাস সহ বিতরণ করা দরকার এমন আইটেমের তালিকা ফিরিয়ে দেবে। এটি ক্লাসের অভ্যন্তরে, অন্য কোনও সম্পর্কিত শ্রেণি বা অন্য স্তর থেকে ডেকে আনা যায়। উদাহরণস্বরূপ, যদি আপনি Orderদেখতে পাস করেন তবে ব্যবহারকারীদের দ্বারা সংরক্ষণ করা বোতামটি ক্লিক করে চালিয়ে যাওয়ার আগে তারা নিশ্চিত হওয়া আইটেমের তালিকা প্রদর্শন করার needToDeliver()জন্য আপনি নির্বাচিত ব্যবহার করতে পারেন ।OrderOrder
মতামত জবাব
আমি নিয়ামক থেকে ডোমেন ক্লাসটি এভাবে ব্যবহার করি:
def save = {
Order order = new Order()
order.addItem(new Item())
order.addItem(new Item())
repository.create(order)
}
এর সৃষ্টি Orderএবং এর LineItemএকটি লেনদেন হয়। এর মধ্যে যদি একটি LineItemতৈরি করা না যায় তবে কোনওটি তৈরি করা Orderহবে না।
আমার কাছে এমন পদ্ধতি রয়েছে যা একটি একক লেনদেনের প্রতিনিধিত্ব করে, যেমন:
def deliver = {
Order order = repository.findOrderByNumber('ORDER-1')
order.deliver()
// save order if necessary
}
ভিতরে থাকা যেকোনো কিছুই deliver()একক লেনদেন হিসাবে কার্যকর করা হবে। আমার যদি একটি একক লেনদেনে অনেকগুলি সম্পর্কযুক্ত পদ্ধতি সম্পাদন করতে হয় তবে আমি একটি পরিষেবা শ্রেণি তৈরি করব।
অলস লোডিং ব্যতিক্রম এড়াতে, আমি জেপিএ ২.১ নামের সত্তা গ্রাফ ব্যবহার করি। উদাহরণস্বরূপ, বিতরণ স্ক্রিনের জন্য নিয়ামক হিসাবে, আমি deliveryবৈশিষ্ট্য লোড করার পদ্ধতি তৈরি করতে পারি এবং উপেক্ষা করতে পারি bonus, যেমন repository.findOrderByNumberFetchDelivery()। বোনাস স্ক্রিনে, আমি অন্য একটি পদ্ধতি কল করি যা bonusবৈশিষ্ট্য লোড করে এবং উপেক্ষা করে delivery, যেমন repository.findOrderByNumberFetchBonus()। এটির জন্য ডিসপ্লাইন দরকার কারণ আমি এখনও deliver()বোনাস স্ক্রিনের ভিতরে কল করতে পারি না ।