ডিএও এবং সংগ্রহস্থল নিদর্শনগুলির মধ্যে পার্থক্য কী?


423

ডেটা অ্যাক্সেস অবজেক্টস (ডিএও) এবং সংগ্রহস্থল নিদর্শনগুলির মধ্যে পার্থক্য কী? আমি এন্টারপ্রাইজ জাভা বিন (EJB3), হাইবারনেট ওআরএমকে অবকাঠামো হিসাবে এবং ডোমেন-ড্রাইভড ডিজাইন (ডিডিডি) এবং টেস্ট-চালিত বিকাশ (টিডিডি) ডিজাইন কৌশল হিসাবে ব্যবহার করে একটি অ্যাপ্লিকেশন বিকাশ করছি।

উত্তর:


471

DAOডেটা অধ্যবসায়ের একটি বিমূর্ততা । বস্তুর সংগ্রহের
Repository বিমূর্ততা ।

DAOপ্রায়শই টেবিল কেন্দ্রিক ডাটাবেসের নিকটে বিবেচনা করা হবে।
Repositoryডোমেনের কাছাকাছি বিবেচনা করা হবে, শুধুমাত্র সমষ্টিগত শিকড়গুলিতে ডিল করে।

RepositoryDAOএর ব্যবহার করে বাস্তবায়ন করা যেতে পারে তবে আপনি বিপরীতে এটি করবেন না।

এছাড়াও, একটি Repositoryসাধারণত একটি সংকীর্ণ ইন্টারফেস। এটা শুধু বস্তুর একটি সংগ্রহ করা উচিত, একটি সঙ্গে Get(id), Find(ISpecification), Add(Entity)

এর মতো পদ্ধতিটি এটির Updateজন্য উপযুক্ত DAO, তবে একটি নয় Repository- একটি ব্যবহার Repositoryকরার সময় সত্তায় পরিবর্তনগুলি সাধারণত পৃথক ইউনিটঅফ ওয়ার্ক দ্বারা ট্র্যাক করা হত।

এটি বাস্তবায়নের নামক একটি বাস্তবায়ন দেখতে সাধারণ বলে মনে হয় Repositoryযা সত্যই এর চেয়ে বেশি DAOএবং তাই আমি মনে করি তাদের মধ্যে পার্থক্য সম্পর্কে কিছু বিভ্রান্তি রয়েছে।


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

29
আমি .NET বিশ্বে লক্ষ্য করেছি বিশেষত "ডিপোজিটরি" শব্দটি মূলত একটি ডিএও বোঝাতে ব্যবহৃত হয়; "ডিএও" একটি জাভা শব্দটির বেশি।
ওয়েইন মোলিনা

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

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

6
ডিএও "রিড অ্যান্ড রাইটিং" থাকাকালীন কেন একটি সংগ্রহস্থলটি "কেবল পঠনযোগ্য" ধারণা?
ডেনিস

120

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

সংগ্রহস্থলের:

এটি একটি নির্দিষ্ট ধরণের অবজেক্টের একটি ভাণ্ডার - এটি আপনাকে নির্দিষ্ট ধরণের অবজেক্টগুলির অনুসন্ধান করার পাশাপাশি সেগুলি সংরক্ষণ করার অনুমতি দেয়। সাধারণত এটি কেবল এক ধরণের অবজেক্টকে পরিচালনা করবে। যেমন AppleRepositoryআপনাকে করতে দেয় AppleRepository.findAll(criteria)বা করবে AppleRepository.save(juicyApple)। মনে রাখবেন যে সংগ্রহশালা ডোমেন মডেল পদগুলি ব্যবহার করছে (ডিবি শর্তাদি নয় - কোথাও ডেটা কীভাবে বজায় থাকে সম্পর্কিত সম্পর্কিত কিছুই নয়)।

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

ডিএও - ডেটা অ্যাক্সেস অবজেক্ট (অন্য কথায় - ডেটা অ্যাক্সেসের জন্য ব্যবহৃত বস্তু)

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

যেমন আপনার কাছে সহজেই ইউজারডাও থাকতে পারে যা এর মতো পদ্ধতি প্রকাশ করে exp

Collection<Permission> findPermissionsForUser(String userId)
User findUser(String userId)
Collection<User> findUsersForPermission(Permission permission)

এগুলি সমস্ত ব্যবহারকারীর সাথে সম্পর্কিত (এবং সুরক্ষা) এবং একই ডিএওর অধীনে নির্দিষ্ট করা যেতে পারে। এটি সংগ্রহস্থলের ক্ষেত্রে নয়।

পরিশেষে

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


যদি আমি এই অধিকারটি পাই, যেমন আমার কাছে বিদেশী কী হিসাবে এর মতো কিছু CarDescriptionরয়েছে language_id- তবে আমার এই জাতীয় কিছু করা উচিত তা পুনরুদ্ধার করতে: CarRepository.getAll(new Criteria(carOwner.id, language.id));যা আমাকে একটি নির্দিষ্ট ভাষায় ভাষার সমস্ত গাড়ি দেবে - তা হ'ল সঠিক উপায় ?
ডিসপ্লে নামটি

@ স্টেফানফাল্ক, স্প্রিং ডেটা দেখুন, এটি আপনাকে তার চেয়ে আরও ভাল কল করতে দেয়। উদাহরণস্বরূপ যে এটি লেখা যেতে পারে CarRepository.findByLanguageId(language.id)এবং আপনি কোড লিখতে হবে না, আপনি কেবল নামের সাথে একটি পদ্ধতির সাথে ইন্টারফেসটি সংজ্ঞায়িত করেন এবং স্প্রিং ডেটা আপনার জন্য ডিফল্ট বর্গ প্রয়োগ বাস্তবায়নের যত্ন নেয়। সুন্দর ঝরঝরে স্টাফ;)
স্টিফ

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

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

2
"সমষ্টিগত মূল" এমন একটি শব্দ যা প্রায়শই সংগ্রহস্থলের প্যাটার্নের সাথে সংযুক্ত থাকে। আমি জানি না যে আপনি কীভাবে এটি কোনও সংগ্রহস্থলের সংজ্ঞা দিয়ে ব্যবহার করবেন।
খ্রিস্টান স্ট্র্যাম্পার

90

ডিএও এবং সংগ্রহস্থল প্যাটার্ন হ'ল ডেটা অ্যাক্সেস লেয়ার (ডিএএল) প্রয়োগের উপায়। সুতরাং, প্রথমে ডাল দিয়ে শুরু করা যাক।

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

এখনও অবধি আমরা কোনও বিশেষ প্রয়োগের কথা বলিনি: কেবলমাত্র একটি সাধারণ নীতি যা পৃথক মডিউলে ডাটাবেস অ্যাক্সেস লজিক রাখে।

এখন, আমরা এই নীতিটি কীভাবে প্রয়োগ করতে পারি? ঠিক আছে, এটি বাস্তবায়নের একটি উপায়, বিশেষত হাইবারনেটের মতো ফ্রেমওয়ার্ক সহ, এটি ডিএও প্যাটার্ন।

ডিএও প্যাটার্নটি ডাল উত্পন্ন করার একটি উপায়, যেখানে সাধারণত প্রতিটি ডোমেন সত্তার নিজস্ব ডিএও থাকে। উদাহরণস্বরূপ, Userএবং UserDao, Appointmentএবং AppointmentDaoইত্যাদি হাইবারনেট সহ ডিএওর একটি উদাহরণ: http://gochev.blogspot.ca/2009/08/hibernate-generic-dao.html

তারপরে রিপোজিটরি প্যাটার্নটি কী? ডিএওর মতো, ডিপোজিটরি প্যাটার্নও ডাল অর্জনের একটি উপায় a সংগ্রহস্থল প্যাটার্নের মূল বিষয় হ'ল ক্লায়েন্ট / ব্যবহারকারীর দৃষ্টিকোণ থেকে এটি সংগ্রহ হিসাবে চেহারা বা আচরণ করা উচিত। সংগ্রহের মতো আচরণ করে যা বোঝানো হয় তা নয় যে এটির মতো ইনস্ট্যান্ট করা উচিত Collection collection = new SomeCollection()। পরিবর্তে, এর অর্থ এটি যুক্ত করা, অপসারণ, অন্তর্ভুক্ত ইত্যাদির মতো ক্রিয়াকলাপগুলিকে সমর্থন করা উচিত Rep

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

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


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

1
দুর্দান্ত ব্যাখ্যা, স্যার!
পল-সেবাস্তিয়ান মানোলে

74

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

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

সংগ্রহস্থল প্যাটার্ন সম্পর্কে আমি যা কিছু পড়েছি তা এই পার্থক্যের উপর নির্ভর করে: খারাপ ডিএও ডিজাইন বনাম ভাল ডিএও ডিজাইন (ওরফে সংগ্রহশালা নকশার ধরণ)।


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

এই বিবৃতি জন্য +1। সত্যি বলতে কী, এটি প্রযুক্তিগত পার্থক্য নয়, অর্থগত পার্থক্যের মতো দেখাচ্ছে। ডেটা অ্যাক্সেস অবজেক্ট বাক্যাংশটি কোনও "ডাটাবেস" বোঝায় না।
সুধাকর চাবলি

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

17

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

এই লিঙ্কগুলি পরীক্ষা করুন:

http://warren.mayocchi.com/2006/07/27/repository-or-dao/ http://fabiomaulo.blogspot.com/2009/09/repository-or-dao-repository.html


6

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


5

ডিএও ডেটাবেস / ডেটা ফাইল বা অন্য কোনও জেদী প্রক্রিয়াতে বিমূর্ততা সরবরাহ করে যাতে দৃ layer়তা স্তরটি তার প্রয়োগের বিশদটি না জেনে চালিত হতে পারে।

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


3

সংগ্রহস্থলগুলি সু-নকশিত ডিএও ছাড়া আর কিছুই নয়।

ওআরএম টেবিল কেন্দ্রিক তবে ডিএও নয়।

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

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

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


সবার আগে "ওআরএম সংগ্রহশালা / সত্তা"? আপনার অর্থ ORM সত্তা। ওআরএম-এর সংগ্রহস্থল হিসাবে তেমন কোনও জিনিস নেই। সমস্ত ওআরএম এর দ্বিতীয়টি সাধারণত সত্তাগুলির সাথেই ডিল করে। ডোমেন মডেল। ডিএওগুলি সরাসরি টেবিলগুলির সাথে ডিল করে এবং ডেটা অ্যাক্সেসের বিমূর্ত করে। তারা পাশাপাশি সত্তা ফেরত। সত্তা প্রাপ্তিতে সংগ্রহের ইন্টারফেস সরবরাহ করে রিপোজিটরিগুলি হ'ল সর্বোচ্চ বিমূর্ততা। একটি ডিএও একটি সংগ্রহস্থল হতে পারে, যেমন। প্রকৃত স্টোরেজ ইঞ্জিনকে বিমূর্ত করা, এতে একটি ইন্টারফেস সরবরাহ করা এবং (ক্যাশে) সত্তাগুলির সংকলনের দৃশ্য সরবরাহ করা। একটি ডিএও ডাটাবেস এবং প্রতিনিধি সত্তা অপ্সের সাথে ইন্টারফেস করতে একটি ওআরএম ব্যবহার করতে পারে।
পল-সেবাস্তিয়ান মানোলে

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

2

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

আগ্রহী হলে নীচের লিঙ্কগুলিকেও উল্লেখ করুন:

http://www.codeinsanity.com/2008/08/repository-pattern.html

http://blog.fedecarg.com/2009/03/15/domain-driven-design-the-repository/

http://devlicio.us/blogs/casey/archive/2009/02/20/ddd-the-repository-pattern.aspx

http://en.wikipedia.org/wiki/Domain-driven_design

http://msdn.microsoft.com/en-us/magazine/dd419654.aspx


0

খুব সাধারণ বাক্যে: উল্লেখযোগ্য পার্থক্য হ'ল রিপোজিটরিগুলি সংগ্রহগুলি উপস্থাপন করে, যদিও ডিএওগুলি ডাটাবেসের নিকটে থাকে, প্রায়শই অনেক বেশি টেবিলকেন্দ্রিক হয়।


ডিএও সংগ্রহ / অবজেক্টগুলিও উপস্থাপন করতে পারে ...
ইউশা আলেয়াউব

0

বসন্ত কাঠামোয়, সংগ্রহশালা নামে একটি টীকা রয়েছে এবং এই টীকাটির বর্ণনায়, সংগ্রহশালা সম্পর্কে দরকারী তথ্য রয়েছে, যা আমি মনে করি এটি এই আলোচনার জন্য দরকারী।

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

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

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

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