"ম্যাপার" একটি বৈধ ডিজাইনের প্যাটার্ন বা এটি "ফ্যাক্টরি" প্যাটার্নের কোনও প্রকরণ?


37

একটি সাধারণ প্যাটার্ন যা আমি দেখি তা হ'ল Mapperপ্যাটার্ন হিসাবে পরিচিত ( DataMapperপুরোপুরি অন্য কিছু যা নিয়ে বিভ্রান্ত হবেন না ), যা একটি যুক্তি হিসাবে একরকম "কাঁচা" ডেটা উত্স হিসাবে গ্রহণ করে (যেমন একটি ADO.NET DataReaderবা DataSet) এবং ক্ষেত্রগুলিতে মানচিত্র করে একটি ব্যবসায় / ডোমেন অবজেক্টের বৈশিষ্ট্য। উদাহরণ:

class PersonMapper
{
    public Person Map(DataSet ds)
    {
        Person p = new Person();
        p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString();
        // other properties...
        return p;
    }
}

ধারণাটি আপনার গেটওয়ে / ডিএও / সংগ্রহশালা / ইত্যাদি। এটি ম্যাপারে ফিরে আসার আগেই কল করবে, সুতরাং আপনি অন্তর্নিহিত ডেটা ধারক বনাম একটি সমৃদ্ধ ব্যবসায়িক সামগ্রী পাবেন।

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

কারখানা: ডোমেন অবজেক্ট তৈরির পদ্ধতিগুলির জন্য কোনও বিশেষ কারখানার অবতারণ করা উচিত যেমন বিকল্প বাস্তবায়ন সহজেই পরিবর্তিত হতে পারে।

এই উক্তিটি থেকে আমি কেবলমাত্র তফাতটিই ভাবতে পারি যে ডিডিডি-স্টাইলের কারখানাটি প্যারামিটারাইজ করা যেতে পারে যাতে প্রয়োজন দেখা দিলে এটি একটি বিশেষ ধরণের অবজেক্টটি ফিরিয়ে আনতে পারে (যেমন বিজনেসকাস্টমারের বনাম আবাসিক কাস্টমারের) যখন "ম্যাপার" নির্দিষ্ট শ্রেণিতে যুক্ত থাকে এবং শুধুমাত্র অনুবাদ করে।

সুতরাং এই দুটি নিদর্শন মধ্যে একটি পার্থক্য আছে বা মূলত বিভিন্ন নামের সাথে একই জিনিস?


এটি কি ওআরএম থেকে আলাদা এবং যদি তাই হয় তবে পার্থক্যটি কোথায়?
জেবি কিং

ওআরএমগুলি আপনার জন্য ম্যাপিংটি স্বয়ংক্রিয়ভাবে পরিচালনা করে - এটি এমন একটি দৃশ্যের জন্য যেখানে আপনি কোনও ওআরএম ব্যবহার করতে পারবেন না (বা আপনার নিজের ডেটা স্তর / পাতলা ওআরএম লিখতে হবে)
ওয়েন মোলিনা

1
আমি কীভাবে ডেটা ম্যাপারকে "সম্পূর্ণ অন্য কিছু" হিসাবে দেখতে লড়াই করছি।
পিডিআর

হতে পারে আমি ভুল হয়েছি - আমি ভেবেছিলাম যে DataMapperপ্যাটার্নটি ডাটাবেস নিজেই অ্যাক্সেস করেছে, যখন এই "ম্যাপার" ডাটাবেস থেকে টানছে না, কেবল কোনও ধরণের ফলাফলের সেটটিকে কোনও বস্তুতে রূপান্তরিত করে।
ওয়েইন মোলিনা

martinfowler.com/eaaGGG.re/dataMapper.html আপনি কী বলতে চাইছেন তা আমি সাজানোর চেষ্টা করি তবে, শেষ অনুচ্ছেদে পড়া, এটি প্রায় সঠিক। PEAA ক্যাটালগ দেখুন। martinfowler.com/eaaGGG.re/index.html । আপনি যা বর্ণনা করছেন তা হ'ল এক ধরণের ম্যাপার এবং বাকিগুলির চেয়ে ডেটা ম্যাপারকে আরও ঘনিষ্ঠভাবে ফিট করে।
পিডিআর

উত্তর:


23

যদিও আমি প্রথমবারের মতো ম্যাপার প্যাটার্নটি শুনি তবে আমার কাছে এটি কারখানার চেয়ে বিল্ডার প্যাটার্নের মতো বেশি মনে হয়।

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

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

আমার কাছে ম্যাপার একটি বিল্ডারের বৈকল্পের মতো শোনাচ্ছে, যেখানে কনস্ট্রাক্টর প্যারামিটারগুলি ডাটাবেস রেকর্ড বা অন্য কোনও "কাঁচা" ডেটা কাঠামোর আকারে আসে।


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

1
@ ওয়েন এম: অনেক বেশি। যদিও কোনও বিল্ডারে প্রচুর যুক্তি থাকতে পারে, কারণ বৈশিষ্ট্যগুলিতে ডেটা ম্যাপিং মোটেই সরাসরি এগিয়ে নাও যেতে পারে। প্রকৃতপক্ষে, কোনও বিল্ডার প্যারামিটারগুলি তৈরি করতে অন্য বিল্ডারকে থাকতে পারে। :)
ডিমা

5
বিল্ডার প্যাটার্ন আপনাকে সময়ের সাথে সাথে জটিল (সাধারণত অপরিবর্তনীয়) অবজেক্ট তৈরি করতে প্রয়োজনীয় সমস্ত তথ্য রাখার অনুমতি দেয় এবং প্রক্রিয়াটির শেষে অবজেক্টটি ইনস্ট্যান্ট করে দেয় ate এখানে যা ঘটছে তা তা নয়।
pdr

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

@ পিডিআর, আমি একমত যে ম্যাপার কোনও বিল্ডারের মতো নয়, কারণ সমস্ত ডেটা একসাথে পাওয়া যায়। তবে এটি খুব অনুরূপ, কারণ এটি কেবলমাত্র এক ধরণের অবজেক্ট তৈরি করে।
ডিমা

8

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

  1. ম্যাপার - এখানে যা ব্যাখ্যা করা হয়েছে তার কাছাকাছি: http://www.codeproject.com/KB/library/AutoMapper.aspx । এটি উপরের মতো হুবহু নয় - তবে ম্যাপার সম্পর্কে আমি নিকটতম খুঁজে পেয়েছি।

  2. নির্মাতা - এখানে সংজ্ঞায়িত হিসাবে: http://www.oodesign.com/builder-pattern.html

  3. কারখানা - এখানে সংজ্ঞায়িত করা হয়েছে: http://www.oodesign.com / ফ্যাক্টরি- pattern.html

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

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

কারখানার নিদর্শনগুলি শুরুতে খুব সহজ দেখাচ্ছে। এটি একটি নতুন নির্মিত বস্তুগুলি ফেরত দেয়। যদি কোনও সাধারণ কনস্ট্রাক্টর নতুন () এর মতো অপারেটর ব্যবহার করে আমাকে পুরোপুরি কার্যক্ষম উদাহরণ দিতে পারেন? আমার কেন এমন কারখানা দরকার যা আমাকে একই ফলাফল দেয়?

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

Dipan।


4

আপনার প্রশ্নের উত্তর: "ম্যাপার" একটি বৈধ ডিজাইনের ধরণ? হ্যাঁ. ম্যাপার প্যাটার্নটি অনুবাদক প্যাটার্নের মতোও পরিচিত এবং এটি একটি নথিভুক্ত প্যাটার্ন: http://www.iro.umontreal.ca/~keller/Layla/translator.pdf


4

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

বাস্তবে ম্যাপার কারখানা বা নির্মাতার মতো নয়। ম্যাপারটি বেশিরভাগ অ্যাডাপ্টার প্যাটার্নের মতো (GoF পার্লেন্স ব্যবহার করে)। একটি উপস্থাপনা অন্যটিকে রূপান্তর করার জন্য অ্যাডাপ্টার প্যাটার্ন কার্যকারিতা সরবরাহ করে। ওপি ADO.NET- তে ডেটাসেট এবং ডেটা রিডারকে উল্লেখ করেছে - ভাল কিভাবে স্ক্যালটাডাটা অ্যাডাপ্টার? উত্তরটি নামেই রয়েছে। ম্যাপার এমন কোনও কিছুর জন্য নতুন নাম যা প্রবীণ প্রোগ্রামাররা দীর্ঘকাল ধরে জেনে থাকে: অ্যাডাপ্টার।

ম্যাপার একটি উপস্থাপনাটিকে অন্যটিতে রূপান্তরিত করে - অ্যাডাপ্টার প্যাটার্নের খুব সংজ্ঞা।


1

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


0

নির্মাতারা একটি অবজেক্ট তৈরির জন্য জটিল ব্যবসায়ের যুক্তি সজ্জিত করে। অন্যদিকে ম্যাপারগুলি কেবল ক্ষেত্রগুলি এক থেকে অন্যটিতে অনুলিপি করা উচিত।

উদাহরণস্বরূপ মানচিত্রে ডেটাবেস কর্মচারী অবজেক্ট থেকে ডোমেন কর্মচারী অবজেক্ট, মানচিত্র ডোমেন কর্মচারী অবজেক্ট থেকে ক্লায়েন্ট চুক্তিতে।

অন্যদিকে নির্মাতারা একটি অবজেক্ট তৈরির জন্য একাধিক ব্যবসায়িক সিদ্ধান্তের হোস্ট করে । একক দায়িত্বের দৃষ্টিকোণ থেকে, এটি উপলব্ধি করে।

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