ডিডিডি-তে একটি ডোমেন পরিষেবা মূলত কেবল একটি মুখোমুখি এবং / অথবা মধ্যস্থতার প্যাটার্ন?


13

ডোমেন চালিত ডিজাইনে, ডোমেন স্তরটিতে বেশ কয়েকটি (প্রচলিত) পরিষেবা থাকতে পারে services উদাহরণস্বরূপ, ব্যবহারকারীর ডোমেনের জন্য আমাদের থাকতে পারে:

  • একটি ব্যবহারকারী কারখানা, যা বিভিন্ন উপায়ে ব্যবহারকারীর অবজেক্ট তৈরি করে
  • একটি ইউজারিপোজিটরি, যা অবকাঠামো স্তরটিতে অধ্যবসায় পরিষেবাগুলির সাথে যোগাযোগের জন্য দায়বদ্ধ

ডোমেন স্তরটিতে কোনও ইউজারসেসওয়ার কি কেবলমাত্র মধ্যস্থতাকারী এবং / অথবা সেই দুটি পরিষেবা এবং অবকাঠামোগত স্তরটির মুখোমুখি, বা এর আরও কিছু আছে?



আমি লেভেল গোরোডিনস্কি পোস্টগুলি খুব ভালভাবে পড়েছি, যদিও এটি দ্বিতীয় লিঙ্কটি কখনও দেখেনি। দুর্দান্ত পড়া, অবশ্যই কিছু গুরুত্বপূর্ণ পয়েন্ট স্পর্শ!
e_i_pi

উত্তর:


11

Domain services যা তারা নয় তা দ্বারা সর্বোত্তমভাবে বর্ণনা করা হয়েছে:

  • তারা Entitiesনা হয়Aggregate roots
  • তারা না Value objects
  • ডোমেন জ্ঞান বহন করুন যা স্বাভাবিকভাবে কেবল এক Entity বা একের সাথে মানানসই নয় Value object

এর একটি উদাহরণ Domain serviceহ'ল Saga/Process manager: এটি দীর্ঘ থেকে চলমান প্রক্রিয়াটিকে একাধিক Aggregate roots, বিভিন্ন থেকে সম্ভব সমন্বিত করে Bounded contexts

হচ্ছে বলেন, কি একটি Domain serviceএবং কিভাবে এটা বাস্তবায়িত হয় দুই লম্ব জিনিস।

ডোমেন স্তরটিতে কোনও ইউজারসেসওয়ার কি কেবলমাত্র মধ্যস্থতাকারী এবং / অথবা সেই দুটি পরিষেবা এবং অবকাঠামোগত স্তরটির মুখোমুখি, বা এর আরও কিছু আছে?

কিছু একটি মত ডোমেইন সেবা UserRepository(একটি ইন্টারফেস সংজ্ঞায়িত গঠিত Domain layerএবং একটি কংক্রিট বাস্তবায়ন Infrastructure layer) করতে ব্যবহার করে রূপায়িত হতে Facadeনকশা প্যাটার্ন। অন্যান্য ডোমেন পরিষেবা নেই।

এগুলি কীভাবে প্রয়োগ করা যায় সে সম্পর্কে কোনও কঠোর নিয়ম নেই , গুরুত্বপূর্ণ নিয়ম ছাড়া অন্যটি Domain layerঅবশ্যই অন্যান্য স্তর (এবং সোলিড ) এর উপর নির্ভর করে না ।


আপনাকে ধন্যবাদ, আমি মনে করি আমি শেষ পর্যন্ত ডোমেন স্তরটি বুঝতে পেরেছি। ডেটা অবজেক্টগুলি (সমষ্টি, সত্তা এবং মান অবজেক্টস) ধরে রাখার পাশাপাশি এটি ব্যবসায়িক বিধিগুলিও ধারণ করে - তবে এই বিধিগুলির সুনির্দিষ্ট বাস্তবায়ন নয়। ডোমেন পরিষেবাদি ডোমেন ডেটা অবজেক্টগুলিতে আপনি কী করতে পারেন তা সংজ্ঞায়িত করে তবে অভ্যন্তরীণভাবে কীভাবে এই অপারেশনগুলি কাজ করে সে সম্পর্কে কোনও জ্ঞান নেই।
e_i_pi

1
@e_i_pi ব্যবসায়িক বিধিগুলি কেবলমাত্র সমষ্টি এবং তাদের নেস্টেড সত্তা দ্বারা সুরক্ষিত। ডোমেন পরিষেবাগুলি এতে জড়িত নয়।
কনস্টান্টিন গালবেনু

1
@e_i_pi যেখানে অপারেশনে একাধিক সমষ্টি জড়িত। উদাহরণস্বরূপ, কোনও ব্যক্তির ব্যাংক অ্যাকাউন্টস (অগ্রিগেটস) এর তালিকা দেওয়া (অন্য সমষ্টি) একটি ডোমেন পরিষেবা সেই অ্যাকাউন্টগুলির মোট ব্যালেন্স গণনা করবে।
কনস্টান্টিন গালবেনু

1
@ ই_আই_পি: আমার মনে হয় আপনার কয়েকটি ভুল ধারণা রয়েছে। সুতরাং, পুরো ডোমেন স্তরটি আপনার ডোমেনের একটি সফ্টওয়্যার মডেল। আপনি বলেছিলেন - "ডেটা অবজেক্টগুলি (সমষ্টি, সত্তা এবং মান অবজেক্টস) ধরে রাখার পাশাপাশি" - এগুলি "ডেটা অবজেক্টস" নয় এই অর্থে যে তারা কেবল ডেটা ধারণ করে; এগুলি প্রকৃতপক্ষে ডোমেন বিধি প্রয়োগ করে, তারা আচরণটি সংজ্ঞায়িত করে। এখন, ই। ইভান্সের ডিডিডি বুক অনুসারে ডোমেন পরিষেবাদিগুলি হ'ল ডোমেনের সেই দিকগুলি যা কোনও বস্তুর (কোনও সত্তা বা কোনও মান বস্তুর) সাথে প্রাকৃতিকভাবে ফিট করে না।
ফিলিপ মিলোভানোভিć

1
পরিবর্তে, একটি ডোমেন পরিষেবা "ক্লায়েন্টের জন্য এটি কী কী করতে পারে তার পরিমাপে সংজ্ঞায়িত হয়", ডোমেন মডেলের অন্যান্য উপাদানগুলির ক্ষেত্রে এটি সংজ্ঞায়িত হয় (সুতরাং এটি কোনওভাবে এই উপাদানগুলিকে অর্কেস্টেট করে এবং সেই অর্কেস্টেশন পরিচালনা করে এমন ডোমেন বিধি প্রয়োগ করে)। ডোমেন পরিষেবা নিজেই রাষ্ট্রহীন। অ্যাপ্লিকেশন পরিষেবাগুলির ধারণাটিও রয়েছে , যা একটি উচ্চ স্তরের স্তরে থাকে এবং ব্যবহারকারীর গল্পগুলি প্রয়োজনীয়ভাবে প্রয়োগ করে, বা ডোমেন স্তরের দিকে ইন্টারফেস হিসাবে কাজ করে সমানভাবে মামলাগুলি ব্যবহার করে। নোট করুন যে পণ্যগুলির তুলনায় পরিষেবাদি বনামের ডোমেনের মডেল অনুসারে পরিষেবাগুলির অনুপাত পৃথক হবে।
ফিলিপ মিলোভানোভিć

1

নির্ভরতা বিপর্যয়ের ফলাফল হিসাবে আমি ডিডিডি-তে পরিষেবাদিগুলি দেখছি ।

আপনি যদি "সরল" নির্ভরতা ব্যবহার করতে চান, তবে আপনার ডোমেন কোডটি কোনও সত্তা, বা কারখানার সংরক্ষণ বা জিজ্ঞাসা করার জন্য ডাটাবেস কল করবে যা একটি সত্তা তৈরি করে, যা ডাটাবেস বা বাহ্যিক পরিষেবা বা কোনও ধরণের অন্যান্য অবকাঠামো কোডের সাথে যুক্ত।

তবে ডোমেন কোডটি এমন হওয়া উচিত নয়। ডোমেন কোড অবকাঠামো কোডের উপর নির্ভর করবে না। যেহেতু এই নির্ভরতা পরীক্ষা করা আরও কঠিন করে এবং সম্ভবত পুনরায় ব্যবহার করতে পারে। যে কারণে আপনি সেই নির্ভরতা উল্টে দিন। আপনি পরিকাঠামো কোডটি ডোমেন কোডের উপর নির্ভর করে। এবং এটি করার জন্য, আপনাকে একটি বিমূর্ততা প্রবর্তন করতে হবে। একটি বিমূর্ততা যা ডোমেন কোডটি অবকাঠামোগত দ্বারা বাস্তবায়িত হওয়ার প্রত্যাশা করে এমন আচরণকে সংজ্ঞায়িত করে।

এবং ডিডিডিতে পরিষেবাগুলি হ'ল বিমূর্ততা। সর্বাধিক ক্ষেত্রে, ডোমেন কোডের জন্য, সেই পরিষেবাগুলি প্লেইন ইন্টারফেস হওয়া উচিত। এবং বাস্তবায়নটি অবকাঠামো কোডে হওয়া উচিত, যার সেই ইন্টারফেসগুলির উপর নির্ভরতা রয়েছে।


আপনার উত্তরের জন্য ধন্যবাদ, উভয় উত্তর একসাথে আমাকে "আহা!" দিয়েছে মুহূর্ত। আমি মনে করি আপনার উত্তর ছাড়া আমি ধারণাটি পুরোপুরি আঁকড়ে ধরতে পারতাম না, তবে আমি ভবিষ্যতের পাঠকদের কাছে একটি সূচক হিসাবে কনস্ট্যান্টাইন এর উত্তরকে পছন্দ করি।
e_i_pi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.