একটি ভান্ডার সত্যিই কি করা উচিত?


15

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

আমি বলতে চাইছি, ভাণ্ডারগুলিতে ব্যবসায়ের যুক্তি থাকা উচিত, বা তাদের কেবল ডেটা স্টোরের সাথে যোগাযোগ করার এবং সত্তাগুলি সংরক্ষণ বা লোড করার জন্য পরিচালনা করার জন্য যুক্তি থাকতে হবে?

এছাড়াও আমি শুনেছি সংগ্রহস্থলগুলি সমষ্টিগুলির জন্য দৃ pers়তার একক। তবে কীভাবে? এটি বাস্তবে কীভাবে কাজ করে তা বুঝতে আমি ব্যর্থ। আমি ভেবেছিলাম যে আমাদের কেবল একটি ইন্টারফেস থাকা উচিত IRepositoryযা সিআরইউডি পদ্ধতিগুলি ধারণ করে এবং তারপরে যে কোনও সত্তার জন্য বাস্তবায়নে কেবল ডেটা স্টোর থেকে এই জাতীয় ধরণের সংরক্ষণ এবং পুনরুদ্ধার করার জন্য যুক্তি থাকতে পারে।


4
"ভান্ডারগুলিতে ব্যবসায়ের যুক্তি থাকা উচিত" - না।
ozz

1
এসও সম্পর্কিত একটি প্রশ্নের এখানে আমার উত্তর
এরিক কিং

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

উত্তর:


13

ওয়েল, আপনি স্প্রিং ডেটা ফ্রেমওয়ার্কে একটি ভাল উদাহরণ দেখতে পাচ্ছেন যা ভান্ডারগুলির ধারণার উপর ভিত্তি করে।

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

সুতরাং, ভাল কাঠামো ডিজাইন অধ্যয়নের জন্য এই কাঠামোটি সম্ভবত একটি ভাল জায়গা।

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

আপনি এর একটি অনুলিপি পেতে বিবেচনা করতে পারেন।

বইয়ের একটি ছোট অংশ ব্যাখ্যা করেছে:

REPOSITORY প্যাটার্ন হ'ল সেই সমাধানগুলিকে আবদ্ধ করতে এবং আমাদের মডেল ফোকাসটি ফিরিয়ে আনার জন্য একটি সাধারণ ধারণাগত কাঠামো।

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

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

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

অতএব:

বিশ্বব্যাপী অ্যাক্সেসের প্রয়োজন এমন প্রতিটি ধরণের অবজেক্টের জন্য এমন একটি বস্তু তৈরি করুন যা সেই ধরণের সমস্ত বস্তুর ইন-মেমরি সংগ্রহের মায়াজাল সরবরাহ করতে পারে। একটি সুপরিচিত গ্লোবাল ইন্টারফেসের মাধ্যমে অ্যাক্সেস সেট আপ করুন।

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


4

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

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

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