আমরা কি সঠিকভাবে সংগ্রহস্থল প্যাটার্নটি ব্যবহার করছি?


14

আমরা -repositoryডাটাবেস থেকে ডেটা পুনরুদ্ধার করতে প্রত্যয়যুক্ত পৃথক শ্রেণীর একটি গুচ্ছ ব্যবহার করছি ; প্রতিটি টেবিলের জন্য তার নিজস্ব ভাণ্ডার।

উদাহরণস্বরূপ আমাদের কাছে এমন একটি customerrepositoryশ্রেণি রয়েছে যা গ্রাহকদের পুনরুদ্ধার করার জন্য vacancyrepositoryসমস্ত ধরণের পদ্ধতি এবং শূন্যপদগুলি পুনরুদ্ধার করার জন্য সমস্ত ধরণের পদ্ধতি রয়েছে।

কাজ করার এই পদ্ধতি সম্পর্কে আমার দুটি প্রশ্ন রয়েছে:

  1. একাধিক টেবিল বিস্তৃত ডেটা পাওয়ার বিষয়ে কীভাবে? উদাহরণস্বরূপ আমার কাছে একটি স্ক্রিন রয়েছে যা এমন সমস্ত গ্রাহককে দেখায় যারা এখনও শূন্যপদ তৈরি করেনি। এর কোনও customerrepositoryপদ্ধতি ব্যবহার করতে পারে vacancyrespository, বা উভয় ভান্ডারগুলি কী ফলাফল দিতে পারে এবং হায়ারার্কিতে উচ্চতর শ্রেণি আছে (আসুন এটির নাম দিন dataservice) যা উভয় সংগ্রহস্থলের ফলাফল পেয়ে তাদের 1 টি ফলাফলের সাথে সংযুক্ত করে?

  2. এই ধরনের একটি সংগ্রহস্থল হ্যান্ডেল করতে পারে কত যুক্তি?
    আমি মনে করি কেবল সক্রিয় রেকর্ডগুলি পুনরুদ্ধার করতে কোনও সংগ্রহস্থলে 'যেখানে সক্রিয় == সত্য' প্রয়োগ করা ঠিক আছে, বা এমনকি এই সাধারণ যুক্তিটি কি শ্রেণিবদ্ধের উচ্চতর শ্রেণি দ্বারা পরিচালিত হওয়া উচিত (আসুন এটির নামকরণ করব dataservice)?

আমি এখন যে উদাহরণটি চালিয়ে যাচ্ছিলাম তা হ'ল:

আমাদের একটি প্রশ্নের তালিকা রয়েছে, যার মধ্যে এক বা একাধিক প্রশ্ন রয়েছে।
প্রশ্নের একটি ফলাফল হতে পারে, যা একটি পৃথক টেবিলের মধ্যে রয়েছে।
সুতরাং আপনি যখন প্রশ্নের তালিকার মোট ফলাফলটি পুনরুদ্ধার করতে চান, আপনাকে questionlistসারণী, প্রশ্ন সারণী এবং সারণী থেকে ডেটা একত্রিত করতে হবে questionstatus

এই মুহূর্তে আমাদের কাছে এই টেবিলগুলির জন্য 3 টি পৃথক সংগ্রহস্থল রয়েছে।

যদি আমি এটি জিজ্ঞাসা করি questionlistrepositoryযে এটি 12 নম্বর তালিকার মোট ফলাফল কী, তবে এটি অন্য দুটি সংগ্রহস্থল থেকে ডেটা পেতে হবে এবং তাই এতে কিছু যুক্তি থাকতে পারে, এটি কি অনুমোদিত?

বা এমন কোনও আছে questionlistdataserviceযা জানে কোন সংগ্রহস্থলগুলি ব্যবহার করতে হবে?

আরও একটি জিনিস: আমাদের সংগ্রহস্থলগুলির ফলাফল হতে পারে IQueryableযাতে একটি কলিং পরিষেবা সহজেই ফলাফলগুলিকে একত্রিত করতে পারে তবে কীভাবে যখন এটি হয় না, তবে আমি মনে করি না যে তিনটি টেবিলের সমস্ত বিষয়বস্তু থেকে সমস্ত তথ্য উদ্ধার করা ভাল ধারণা don't তথ্যশালা.


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

উত্তর:


15

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

যদি আপনার সংগ্রহস্থল সর্বদা আপনার ডেটা কাঠামোর যথাযথ উপস্থাপনা ফিরিয়ে দেয় তবে তা আসলে টেবিল ডেটা গেটওয়ে ওরফে ডেটা অ্যাক্সেস অবজেক্ট (ডিএও) হতে পারে।

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

আপনার উদাহরণ থেকে দেখে মনে হবে আপনার আসলে ডিএও আছে এবং কেবল তাদের নাম রেপোসটরিগুলি রেখেছেন।


একটি সংগ্রহস্থল তৈরি করার সময়, আমি আরও একটি স্তর আরও গভীরতর একটি টেবিল তথ্য গেটওয়ে থাকতে পারে, এবং আমাদের সংগ্রহস্থল আসলে TDG এর হয়।
মিশেল

1
আপনি পারেন, তবে ব্যয় এবং সুবিধাগুলি ওজন করতে পারেন। কোড "লেয়ারিং" নীতি অনুসারে ডিএও এবং রেপোজিটরিগুলিকে পৃথক করে রাখার জন্য বকাঝকা করবেন না। এক্ষেত্রে সর্বাধিক পঠনযোগ্য যা করুন। বিভাজন এবং ফলস্বরূপ বিমূর্ত স্তরটি কার্যকর হতে পারে যদি আপনার রিপোজিটরিগুলি ডিএও-তে ডেটা পুনরায় সংযোজন করতে থাকে।
মিহাই ড্যানিলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.