ডিডিডি - একটি সামগ্রিক শিকড়ের সংগ্রহস্থল হ্যান্ডেল কি সঞ্চয়গুলি সঞ্চয় করে?


27

আমি একটি বিদ্যমান অ্যাপ্লিকেশনের গ্রিনফিল্ড মডিউলের জন্য ডিডিডি -র মতো পদ্ধতির ব্যবহার করছি; আর্কিটেকচারের কারণে এটি 100% ডিডিডি নয় তবে আমি কয়েকটি ডিডিডি ধারণাটি ব্যবহার করার চেষ্টা করছি। আমার একটি সীমাবদ্ধ প্রসঙ্গ আছে (আমি মনে করি এটি সঠিক শব্দ - আমি এখনও ডিডিডি সম্পর্কে শিখছি) দুটি সত্তা নিয়ে গঠিত: Conversationএবং Message। কথোপকথন মূল কারণ, কথোপকথন ছাড়া কোনও বার্তা উপস্থিত নেই এবং সিস্টেমের সমস্ত বার্তা একটি কথোপকথনের অংশ।

আমার একটি ConversationRepositoryক্লাস রয়েছে (যদিও এটি গেটওয়ের মতো সত্যিই বেশি, আমি "রেপোজিটরি" শব্দটি ব্যবহার করি) যা ডেটাবেসে কথোপকথন খুঁজে পায়; যখন এটি কোনও কথোপকথনটি সন্ধান করে তখন এটি কথোপকথনের জন্য (কারখানার মাধ্যমে) বার্তাগুলির একটি তালিকা তৈরি করে (সম্পত্তি হিসাবে প্রকাশিত)। এটি জিনিসগুলি পরিচালনা করার সঠিক উপায় বলে মনে হয় MessageRepositoryকারণ কোনও কথোপকথন পুনরুদ্ধার করার সময় কেবল এটি উপস্থিত থাকে কারণ এটি একটি পূর্ণ-বিকাশের শ্রেণীর প্রয়োজন বলে মনে হয় না ।

যাইহোক, যখন বার্তাটি সংরক্ষণ করার কথা আসে তবে এটি কি কথোপকথনের রিপোজিটরির দায়িত্ব, কারণ এটি বার্তার সামগ্রিক মূল? আমার অর্থ হ'ল, আমার কি কথোপকথন রিপোসিটোরি নামক কোনও পদ্ধতি থাকা উচিত, বলুন, AddMessageএটি কোনও বার্তাটিকে প্যারামিটার হিসাবে নেয় এবং এটি ডেটাবেসে সংরক্ষণ করে? বা বার্তাগুলি সন্ধান / সংরক্ষণের জন্য আমার একটি পৃথক সংগ্রহস্থল থাকা উচিত? যৌক্তিক জিনিসটি প্রতি সত্তার জন্য একটি সংগ্রহস্থল বলে মনে হয়, তবে আমি "কনটেক্সট প্রতি একটি সংগ্রহস্থল" শুনেছি।

উত্তর:


25

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

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

সত্তাগুলি ধরে রাখার জন্য সংগ্রহস্থলগুলির প্রয়োজন যা অন্যান্য বস্তুর ট্র্যাভারসাল দ্বারা সহজেই পাওয়া যায় না। সংগ্রহস্থলগুলিতে সাধারণত সমষ্টিগত শিকড় থাকে তবে নিয়মিত সংস্থাগুলিরও সংগ্রহস্থল থাকতে পারে।

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

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


1
কথোপকথনের মতো সামগ্রিক মূলের যদি এর মধ্যে অনেকগুলি পৃথক সত্তার প্রকার থাকে যেমন মেসেজ, থিংস এবং উইঙ্গিজ, তবে আপনি যখন কোনও কথোপকথন সংরক্ষণ করেন, যেমন: কথোপকথন.রোপ.সেজ (কথোপকথন), আপনি কীভাবে জানবেন যে এর মধ্যে কোন সত্তা প্রয়োজন বাঁচাতে হবে? উপরের পোস্টারে উদাহরণস্বরূপ, কেবলমাত্র বার্তা সত্তাগুলি সংরক্ষণ করা দরকার। আইডিস ছাড়াই সত্তা খুঁজে পেতে আপনি কি সামগ্রিক মূলের মধ্যে সমস্ত সম্ভাবনা সংগ্রহকে অতিক্রম করছেন?
ক্রিস-রিচার্ডস

3

আপনি তৈরী করতে পারে ConversationService এবং উদ্বুদ্ধ IConversationRepository এবং IMessageRepository তার কন্সট্রাকটর হবে। সাধারণ সিআরইউডি অপারেশনের জন্য সংরক্ষণাগার এবং অন্য কিছুর জন্য পরিষেবাগুলি (ক্যাশে করা, লজিক সংরক্ষণ করা ইত্যাদি) ব্যবহার করুন


1
যুক্তি সিআরইউডি সংরক্ষণ করছে না?
টিমোথী গ্রোট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.