"বিজ্ঞপ্তি কেন্দ্র" প্যাটার্ন ভাল বা খারাপ প্রোগ্রাম নকশা উত্সাহিত করে?


13

কখনও কখনও আমি এই বার্তা-হাব-স্টাইল এপিআইগুলি জুড়ে আসি, উদাহরণস্বরূপ কোকোয়া এনএসএনটিফিকেশন সেন্টার: http://developer.apple.com/library/mac/#docamentation/Cocoa/References/Foundation/Class/NSNotificationsCenter_Class/References/References.html

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

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

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

সম্পাদনা: আমি অনুমান করি যে এই প্যাটার্নটির সাথে আমার সবচেয়ে বড় সমস্যাটি হ'ল এপিআই নির্ভরতা এবং অবজেক্ট কাপলিং সম্পর্কে "মিথ্যা" এবং এই উদাহরণ দিয়ে চিত্রিত করা যায়:

myObj = new Foo();
myOtherObj = new Bar();
print myOtherObj.someValue; // prints 0
myObj.doSomething();
print myOtherObj.someValue; // prints 1, unexpectedly, because I never indicated that these objects had anything to do with each other

আপনি বিশেষত এই উদাহরণটি বা সাধারণভাবে শ্রোতার ধরণটি প্রশ্ন করছেন?
TheLQ

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

উত্তর:


6

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

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

পর্যবেক্ষক বা পর্যবেক্ষকরা উত্সগুলি জানেন না এমন উত্স না রেখে নির্ভরতা ইনজেকশন অর্জনের এটি একটি উপায়। তবে পুরো সিস্টেমটি কাজ করার জন্য আপনাকে সঠিক বিজ্ঞপ্তির জন্য সঠিক পর্যবেক্ষককে তারযুক্ত করা দরকার এবং এই সিস্টেমটি টাইপোগুলির পক্ষেও ঝুঁকিপূর্ণ, কারণ এটি পরীক্ষা করে সময় নির্ধারণ করা যায় না।

অবশ্যই সবচেয়ে বড় বিপদ হ'ল যে কেউ 1-1 কলের জন্য বিশ্বব্যাপী প্রচুর পরিমাণে অবজেক্ট তৈরি করতে এটি ব্যবহার করবেন।


6

অ্যাসিঙ্ক্রোনাস মেসেজিং বড় সিস্টেমগুলির জন্য একটি ভাল স্থাপত্য প্রধান যা স্কেল করতে হবে

এর জাভা সমতুল্য জেএমএস এবং সাধারণত একটি ভাল জিনিস হিসাবে বিবেচিত হয় ।

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

উত্স কোডটিতে এম্বেড না করে কনফিগার করার জন্য এবং বার্তা হাবের ইউআরআই আপনি সহজেই বহিরাগত করতে পারেন।


4

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

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

এটি কি প্রতিটি পরিস্থিতির জন্য উপযুক্ত সমাধান, না। এটি উপাদানগুলির মধ্যে যোগাযোগ বিমূর্ত করে এবং আরও আলগা সংযোগ সরবরাহ করে, হ্যাঁ।


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

0

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

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