ধাপের ধাপে বিবরণীর ধরণ ধরণ (বন্ধ)


276

কেউ আমাকে দয়া করে। নেট এ রেপোজিটরি প্যাটার্নটি ব্যাখ্যা করতে পারেন, একটি খুব সাধারণ উদাহরণ বা ডেমো দিয়ে ধাপে ধাপে।

আমি জানি এটি একটি খুব সাধারণ প্রশ্ন তবে এখনও আমি সন্তোষজনক উত্তর খুঁজে পাইনি।



1
এখানে একটি ভাল লেখার আপ রয়েছে: deviq.com/repository- Pattern
স্মিথ

উত্তর:


199

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

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

সংগ্রহস্থল প্যাটার্নের সাহায্যে আপনার কেবল একটি বস্তু এবং একটি সংগ্রহস্থল পরিবর্তন করতে হবে। এর প্রভাব খুব কম।

সম্ভবত আপনি কেন সংগ্রহস্থল প্যাটার্নটি ব্যবহার করবেন তা ভাবতে সহায়তা করবে। এখানে কিছু কারণ রয়েছে:

  • আপনার ডেটা অ্যাক্সেসে পরিবর্তন আনার জন্য আপনার একক জায়গা রয়েছে

  • টেবিলগুলির একটি সেট (সাধারণত) এর জন্য আপনার একমাত্র জায়গা দায়বদ্ধ

  • পরীক্ষার জন্য ভুয়া প্রয়োগের সাথে একটি সংগ্রহস্থল প্রতিস্থাপন করা সহজ - যাতে আপনার ইউনিট পরীক্ষার জন্য আপনার কোনও ডাটাবেস উপলব্ধ করার দরকার নেই

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


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

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

প্রকৃতপক্ষে
ডিপোজিটিটি

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

181

এটি একটি দুর্দান্ত উদাহরণ: সি # তে সংগ্রহস্থল প্যাটার্নের উদাহরণ

মূলত, কীভাবে ডাটাবেস থেকে / ডাটাবেসে ডেটা সংগ্রহ করা / চালিয়ে যাওয়া হয় তার বিবরণ সংগ্রহস্থলটি গোপন করে। আবরণের নিচে:

  • পড়ার জন্য, সরবরাহ করা মানদণ্ডকে সন্তুষ্ট করে ক্যোরি তৈরি করে এবং ফলাফলের সেটটি প্রদান করে
  • লেখার জন্য, এটি অন্তর্নিহিত অধ্যবসায় ইঞ্জিন (যেমন একটি এসকিউএল ডাটাবেস) ডেটা সংরক্ষণ করার জন্য প্রয়োজনীয় আদেশগুলি জারি করে

13
এই উদাহরণটি সর্বকালের সেরা ব্যাখ্যা, এমএসডিএন ডকুমেন্টেশনের চেয়ে সহজ।
তেওমান শিপাহি

2
আমি দেখেছি এই খুব ভালো। এটি ইউনিট অব ওয়ার্কে শালীন ব্যাখ্যা প্রদান করে, যা রিপোজিটরি প্যাটার্নের উপরে ডেটা প্যাটার্নের আরও সাধারণ রূপ বলে মনে হয়
সেলার্ডার

8
লিঙ্কযুক্ত উদাহরণ হ'ল সংগ্রহস্থল প্যাটার্ন ব্যর্থতা। এটি সত্তা ফ্রেমওয়ার্ক ( IDbContext) বা ISessionসরাসরি নিবারনেটে ( ) সরবরাহিত ইন্টারফেসগুলি ব্যবহারের তুলনায় কোনও লাভ দেয় না । একটি সঠিকভাবে প্রয়োগ করা সংগ্রহস্থল সমস্ত স্থায়ীত্ব সম্পর্কিত নির্দিষ্ট তথ্য (যেমন বর্তমান লিঙ্ক টু এসকিএল সরবরাহকারী কীভাবে কাজ করে) দূরে সরিয়ে দেয়। অর্থাত্ কখনই প্রকাশ করা হবে না IQueryable
jgauffin

3
@ jgauffin IQueryableঅধ্যবসায়ের নির্দিষ্ট তথ্য নয়। আইকিউয়ারেবলের ব্যাকআপ হার্ড কোডড অ্যারের মতোই সহজ হতে পারে বা এটি কোনও এক্সএমএল ফাইল, ওয়েব পরিষেবা, ডাটাবেস, ফ্ল্যাট ফাইল ইত্যাদির হতে পারে I প্রতিটি ক্ষেত্রে ডেটা অ্যাক্সেসকে ধীরে ধীরে নিয়ে যায়, যেখানে আইকিউয়েরেবল এক্সপোজার করা কিছু ক্ষেত্রে উদাহরণস্বরূপ কর্মক্ষমতা বর্ধন করতে দেয় যেখানে যদি অধ্যবসায়ী স্টোরটির ক্ষমতা থাকে তবে প্রযোজ্য। অতিরিক্ত হিসাবে, ডিবি কনটেক্সটকে দূরে লুকিয়ে রাখার প্রয়োজন হলে (বা কোনও ওআরএম নয়!) প্রয়োজন হলে আপনাকে অন্য কোনও ORM এ স্যুইচ করতে দেয়
রবার্ট ম্যাককি

5
এটি দৃ pers়তা সম্পর্কিত তথ্য নির্দিষ্ট তথ্য ফাঁস করে। INনির্দিষ্ট লিনকটিএসএইচএল সরবরাহকারী কীভাবে এটি করে তা না জেনে আগ্রহী / অলস লোডিং বা স্কেল ক্লজ তৈরি করার চেষ্টা করুন।
jgauffin
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.