ডেটা ম্যাপার, টেবিল ডেটা গেটওয়ে (গেটওয়ে), ডেটা অ্যাক্সেস অবজেক্ট (ডিএও) এবং সংগ্রহস্থল নিদর্শনগুলির মধ্যে পার্থক্য কী?


133

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

নামকরণের সম্মেলনগুলি (যেমন গ্রাহকম্যাপার বনাম গ্রাহকদাও বনাম গ্রাহকগেটওয়ে বনাম গ্রাহকরেপোসিটারি), কোনও পার্থক্য কী? যদি পার্থক্য থাকে, আপনি কখন অন্যের থেকে একটি বেছে নেবেন?

অতীতে আমি নিম্নলিখিতগুলির মতো কোড লিখতাম (সরল, প্রাকৃতিকভাবে - আমি সাধারণত পাবলিক বৈশিষ্ট্য ব্যবহার করব না):

public class Customer
{
    public long ID;
    public string FirstName;
    public string LastName;
    public string CompanyName;
}

public interface ICustomerGateway
{
    IList<Customer> GetAll();
    Customer GetCustomerByID(long id);
    bool AddNewCustomer(Customer customer);
    bool UpdateCustomer(Customer customer);
    bool DeleteCustomer(long id);
}

এবং একটি CustomerGatewayক্লাস রয়েছে যা সমস্ত পদ্ধতির জন্য নির্দিষ্ট ডাটাবেস যুক্তি প্রয়োগ করে। কখনও কখনও আমি কোনও ইন্টারফেস ব্যবহার না করে কাস্টমারগেটওয়ে স্ট্যাটিকের সমস্ত পদ্ধতি তৈরি করতাম না (আমি জানি, আমি জানি, এটি এটিকে কম পরীক্ষামূলক করে তোলে) তাই আমি এটিকে কল করতে পারি:

Customer cust = CustomerGateway.GetCustomerByID(42);

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

আমি কিছু অনুপস্থিত করছি? একই সঠিক জিনিসটি করার 3-4 টি ভিন্ন উপায় থাকা খুব অদ্ভুত বলে মনে হয়।

উত্তর:


97

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

একটি সংগ্রহস্থলের প্রয়োগ ", একটি সংগ্রহ মত কাজ করে আরও সম্প্রসারিত কুয়েরিং সামর্থ্য সঙ্গে ব্যতীত" [ ইভান্স, ডোমেন চালিত নকশা ] এবং হিসাবে একটি বিবেচনা করা হতে পারে "মেমরি ফাসাদের বস্তু" ( সংগ্রহস্থলের প্রয়োগ আলোচনা )

একটি ডেটা ম্যাপার "বস্তু এবং একটি ডাটাবেসের মধ্যে ডেটা সরিয়ে রাখে এবং একে অপরের থেকে পৃথক করে রাখে এবং ম্যাপার নিজেই থাকে" ( ফোলার, পোইএএএ, ম্যাপার )

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

একজন দাও "তার ডেটা অ্যাক্সেস মেকানিজম থেকে একটি ডাটা রিসোর্স এর ক্লায়েন্ট ইন্টারফেস আলাদা / একটি জেনেরিক ক্লায়েন্ট ইন্টারফেসে একটি নির্দিষ্ট ডাটা রিসোর্স অ্যাক্সেস এপিআই আত্তীকরণ" যার ফলে "ডেটা অ্যাক্সেস মেকানিজম কোড ডেটা ব্যবহার করে স্বাধীনভাবে পরিবর্তন করার জন্য" ( সূর্যের খেয়াল )

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


15
সত্যই, ডিএও এবং টেবিলডেটাগেটওয়ের মধ্যে এবং [ফোলার, পোইএএ] [১] এ তারা ঠিক বলেছে যে: "[আলুর এট আল।] [২] ডেটা অ্যাক্সেস অবজেক্ট প্যাটার্নটি নিয়ে আলোচনা করে, যা একটি সারণী ডেটা গেটওয়ে। .. আমি একটি আলাদা নাম ব্যবহার করেছি, আংশিক কারণ আমি এই নিদর্শনটিকে আরও সাধারণ গেটওয়ে (466) ধারণার নির্দিষ্ট ব্যবহার হিসাবে দেখছি এবং আমি চাই যে প্যাটার্নটির নামটি এটি প্রতিবিম্বিত করে "" [1]: martinfowler.com/books/eaa.html [2]: books.google.pt/books/about/…
মিগুয়েল গাম্বোয়

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

31

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


4
@ ম্লাদেন মিহাজলভিক, কেবল আপনি বুঝতে বা সম্মত না হওয়ার কারণে, এই উত্তরটি বৈধ বা ইভেন্টটি সঠিক নয় বলে বোঝায় না।
সাইফার

2
@ মিলাদেন মিহাজলভিক এই উত্তরটি বলে না শেষ বাক্যটি এর যোগফল দেয়।
সাইফার

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

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

3
এটি একটি উত্তর চেয়ে একটি মন্তব্য বেশি।
পাতুর ইনগি এগিলসন

31

ডাটা ম্যাপার বনাম সারণী ডেটা গেটওয়ে দীর্ঘ গল্পকে ছোট করার জন্য :

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

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


  • 6
    লিঙ্কটি বাসি হয়ে গেছে
    imel96


    15

    আপনার একটি ভাল পয়েন্ট আছে। আপনি যার সাথে সর্বাধিক পরিচিত তার চয়ন করুন। আমি কয়েকটি বিষয় উল্লেখ করতে চাই যা স্পষ্ট করতে সহায়তা করতে পারে।

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

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

    সুতরাং, সাধারণত কোনও ম্যাপারে আপনি সন্নিবেশ, আপডেট, মুছতে এবং টেবিলের ডেটা গেটওয়েতে getcustomerbyId, getcustomerbyName ইত্যাদি দেখতে পাবেন methods

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

    আমি এখন পর্যন্ত ব্যবহারের সুযোগ পাইনি তবে অন্যের উত্তরগুলির দিকে তাকিয়ে থাকব বলে আমি সংগ্রহস্থলের প্যাটার্নে দক্ষ নই।


    1

    নীচে শুধু আমার বোঝার আছে।

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

    সংগ্রহস্থল / ডাটাম্যাপার / ডিএও : তারা একই জিনিস। এগুলি সকলেই দৃistence়তা স্তরকে উল্লেখ করে যা ডাটাবেস সত্তাকে ডোমেন মডেলটিতে স্থানান্তর করে। গেটওয়ের বিপরীতে, সংগ্রহস্থল / ডাটাম্যাপার / ডিএও বাস্তবায়নটি আড়াল করে। আপনি জানেন না যে কোনও ব্যক্তির পিছনে পার্সনগেটওয়ে আছে কিনা। এটি হতে পারে, বা এটি নাও পারে, আপনার যত্ন নেই। আপনারা সকলেই জানেন এটি প্রতিটি ডোমেন অবজেক্টের জন্য অবশ্যই CRUD অপারেশন সমর্থন করে। এটি ডেটা উত্স এবং ডোমেন মডেলটিকে ডিকুয়াল করে।

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