পর্যবেক্ষক, পাব / সাব এবং ডেটা বাইন্ডিংয়ের মধ্যে পার্থক্য


163

পর্যবেক্ষক প্যাটার্ন , প্রকাশ / সাবস্ক্রাইব এবং ডেটা বাঁধাইয়ের মধ্যে পার্থক্য কী ?

আমি স্ট্যাক ওভারফ্লোতে কিছুটা অনুসন্ধান করেছি এবং কোনও ভাল উত্তর পাই নি।

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

"ডেটা বাঁধাই" প্রয়োগের অন্যান্য নিদর্শন রয়েছে?


আমি আর একটি পেয়েছি: অ্যাঙ্গুলার.জেএস যা করে তা নোংরা চেক করা । এখানে আরও তথ্য: স্ট্যাকওভারফ্লো
জেস

উত্তর:


143

এই তিনটি আমার গ্রহণ:

ডেটা বাইন্ডিং

মূলত, মূলটিতে এর অর্থ হল "অবজেক্ট Y এর উপর থাকা X এর গুণকের মান শব্দার্থগতভাবে অবজেক্ট বিতে সম্পত্তির A এর মানের সাথে আবদ্ধ Y

পর্যবেক্ষক বা পর্যবেক্ষণযোগ্য / পর্যবেক্ষক

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

প্রকা / সদ

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

ডেটা বাইন্ডিং, রেডাক্স

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

রেডাক্স পুনরায় ডেটা বাঁধাই

ডেটা বাঁধাইয়ের জন্য বিকল্প বাস্তবায়ন? ঠিক আছে, এখানে একটি বোকা:

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

আমি আপনার উত্তরটির প্রশংসা করি এবং একটি পৃথক ডেটা বাঁধাই ধারণা বাস্তবায়নের প্রচেষ্টা করি।
জেস

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

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

154

পর্যবেক্ষক / পর্যবেক্ষণযোগ্য এবং প্রকাশক / গ্রাহক নিদর্শনগুলির মধ্যে দুটি প্রধান পার্থক্য রয়েছে:

  1. পর্যবেক্ষক / পর্যবেক্ষণযোগ্য প্যাটার্নটি বেশিরভাগ ক্ষেত্রে একটি সিঙ্ক্রোনাস উপায়ে প্রয়োগ করা হয় , অর্থাত্ পর্যবেক্ষনযোগ্য কিছু ঘটনা ঘটলে তার সমস্ত পর্যবেক্ষকদের উপযুক্ত পদ্ধতিটিকে কল করে। প্রকাশক / গ্রাহক প্যাটার্ন বেশিরভাগই একটি বাস্তবায়িত হয় অ্যাসিঙ্ক্রোনাস উপায় (বার্তা কিউ ব্যবহার করে)।

  2. ইন অবজারভার / পর্যবেক্ষণযোগ্য প্যাটার্ন, পর্যবেক্ষক পর্যবেক্ষণযোগ্য সচেতন । যদিও প্রকাশক / গ্রাহক , প্রকাশক এবং গ্রাহকদের একে অপরকে জানার দরকার নেই । তারা কেবল বার্তার সারিগুলির সাহায্যে যোগাযোগ করে।

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


7
আমি জাভাস্ক্রিপ্ট ওয়েব অ্যাপ্লিকেশনগুলি ও'রিলির ( শপ.রিলি / প্রোডাক্ট 06636920018421.do ) দ্বারা পড়ছিলাম । অধ্যায় 2 এ অ্যালেক্স একটি pub/subজেএস ইভেন্ট ব্যবহার করে প্রয়োগ করে। এটি একটি কলব্যাক প্রকারের প্রয়োগ, তবে এটি একটি সুসংগত উদাহরণ।
জেস

5
আমি বইটি পড়িনি তবে এটি যদি জেএস "ইভেন্টস" ব্যবহার করে প্রয়োগ করা হয়, তবে ঘটনাগুলি সংজ্ঞা অনুসারে অ্যাসিনক্রোনাস হওয়ায় এটি অ্যাসিক্রোনাস হবে।
পরম

3
হাই জেস, অবশ্যই আপনি ঠিক বলেছেন। এই শর্তগুলির জন্য কোনও মানক সংজ্ঞা নেই 😊
পরম

14
সাধারণত কোন পর্যবেক্ষণযোগ্য এর সাথে পর্যবেক্ষকের একটি তালিকা থাকে (এটি তাদের সকলের কাছে একটি ইভেন্ট প্রেরণের জন্য এই তালিকার উপরে পুনরাবৃত্তি করে)। একজন প্রকাশক কেবল একটি সারি সম্পর্কে সচেতন হন যেখানে এটি তার ইভেন্ট / বার্তা প্রকাশ করে। এটি কতজন গ্রাহকরা এই সারিতে সাবস্ক্রাইব করেছেন তা জানেন না।
পরম

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

23

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

একটি বিষয় লক্ষণীয়: এই নিদর্শনগুলির লক্ষ্য কোডটি ডিকুয়াল করার চেষ্টা করছে

পর্যবেক্ষক হ'ল একটি নকশার প্যাটার্ন যেখানে কোনও বস্তু (বিষয় হিসাবে পরিচিত) তার উপর নির্ভর করে (পর্যবেক্ষক) অবজেক্টের একটি তালিকা বজায় রাখে এবং স্বয়ংক্রিয়ভাবে রাষ্ট্রের কোনও পরিবর্তন সম্পর্কে তাদের অবহিত করে।

পর্যবেক্ষক নিদর্শন

এর অর্থ observable objectএটির একটি তালিকা রয়েছে যেখানে এটি তার সমস্ত observers(যা সাধারণত কার্যকরী হয়) রাখে । এবং এই তালিকাটি অতিক্রম করতে পারে এবং যখন এটি একটি ভাল সময় অনুভব করে তখন এই ক্রিয়াকলাপগুলি শুরু করতে পারে।

দেখতে এই পর্যবেক্ষক প্যাটার্ন বিস্তারিত জানার জন্য উদাহরণ।

এই প্যাটার্নটি ভাল যখন আপনি কোনও অবজেক্টে কোনও ডেটা পরিবর্তনের জন্য শুনতে চান এবং অনুরূপে অন্যান্য ইউআই ভিউগুলি আপডেট করতে চান।

তবে কনস অব অবজার্ভেবল কেবল পর্যবেক্ষক রাখার জন্য একটি অ্যারে বজায় রাখে (উদাহরণস্বরূপ, অ্যারেটি হয় observersList)।

আপডেটটি কীভাবে ট্রিগার হয় তা আলাদা করে না কারণ এটির মধ্যে কেবল একটি রয়েছে notify function যা এই অ্যারেতে সঞ্চিত সমস্ত ক্রিয়াকলাপকে ট্রিগার করে।

আমরা যদি বিভিন্ন ইভেন্টের উপর ভিত্তি করে গ্রুপ পর্যবেক্ষক হ্যান্ডলারগুলি করতে চাই। আমাদের কেবল এটির মতো observersListএকটি পরিবর্তন করতে হবেObject

var events = {
    "event1": [handler1, handler2],
    "event2": [handler3]
}

দেখতে এই pubsub উদাহরণ বিস্তারিত জানার জন্য।

এবং লোকেরা এই প্রকরণটিকে হিসাবে ডাকে pub/sub। সুতরাং আপনি eventsপ্রকাশিত উপর ভিত্তি করে আপনি বিভিন্ন ফাংশন ট্রিগার করতে পারেন ।


ভাল এটি একটি আরও ভাল, সংক্ষিপ্ত এবং স্পষ্ট উত্তর। :)
কোডারএক্স

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

9

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

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

আপনি যদি আন্ত-প্রক্রিয়া যোগাযোগে আগ্রহী হন তবে আমি আপনাকে সুপারিশ করছি:

"এন্টারপ্রাইজ ইন্টিগ্রেশন প্যাটার্নস: ডিজাইনিং, বিল্ডিং এবং ম্যাসেজিং সলিউশন স্থাপন" - http://www.addison-wesley.de/9780321200686.html

প্রক্রিয়া বা শ্রেণীর মধ্যে কীভাবে বার্তাগুলি প্রেরণ করা যায় সেগুলি সম্পর্কে আন্তঃ-প্রক্রিয়া যোগাযোগের কাজেও ব্যবহার করা যায় (এটি আমাকে আরও শিথিল-যুগলভাবে প্রোগ্রামে সহায়তা করেছিল) এই বইটিতে প্রচুর ধারণা রয়েছে।

আশা করি এটা কাজে লাগবে!

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