আমি যখনই পারি, আমি অনুরোধ এবং প্রতিক্রিয়া মডেলটিতে অবজেক্টগুলির মধ্যে যোগাযোগকে সীমাবদ্ধ করার চেষ্টা করি। আমার প্রোগ্রামে অবজেক্টগুলির উপর একটি অন্তর্নিহিত আংশিক ক্রম রয়েছে যেমন যে কোনও দুটি এবং A এবং B এর মধ্যে, A এর জন্য B এর কোনও পদ্ধতি প্রত্যক্ষ বা পরোক্ষভাবে কল করার বা B এর জন্য প্রত্যক্ষ বা পরোক্ষভাবে A এর পদ্ধতি কল করতে পারে a , তবে এ এবং বি এর পক্ষে একে অপরের পদ্ধতিতে পারস্পরিক কল করা কখনই সম্ভব নয়। কখনও কখনও, অবশ্যই, আপনি কোনও পদ্ধতির কলারের সাথে পশ্চাদপটে যোগাযোগ করতে চান। আমি এটি করতে বেশ কয়েকটি উপায় পছন্দ করি এবং সেগুলির দুটিও কলব্যাক নয়।
একটি উপায় হ'ল পদ্ধতি কলের রিটার্ন মানটিতে আরও তথ্য অন্তর্ভুক্ত করা হয় যার অর্থ ক্লায়েন্ট কোড পদ্ধতিটি তার নিয়ন্ত্রণ ফিরে আসার পরে এটি দিয়ে কী করবে তা সিদ্ধান্ত নিতে পারে।
অন্য উপায় হ'ল মিউচুয়াল চাইল্ড অবজেক্টকে কল করা। এটি হ'ল, যদি ক বি তে কোনও পদ্ধতিতে কল করে, এবং খ-এ-কে কিছু তথ্য যোগাযোগের প্রয়োজন হয়, বি সি-তে একটি পদ্ধতি কল করে, যেখানে এ এবং বি উভয় সি কল করতে পারে, তবে সি এ বা বি কল করতে পারে না Ob বি এর পরে ক এটিকে নিয়ন্ত্রণের পরে এ সম্পর্কিত তথ্য পাওয়ার জন্য দায়ী Note নোট করুন যে আমি প্রস্তাবিত প্রথম পদ্ধতির চেয়ে এটি মূলত আলাদা নয়। অবজেক্ট এ এখনও কেবলমাত্র একটি ফেরতের মান থেকে তথ্য পুনরুদ্ধার করতে পারে; অবজেক্ট এ এর কোনও পদ্ধতিই বি বা সি দ্বারা চাওয়া হয় না এই কৌশলটির বিভিন্নতা হল সিটির সাথে প্যারামিটার হিসাবে পাস করা, তবে সি এবং এ এবং বি এর সম্পর্কের উপর বিধিনিষেধ এখনও প্রযোজ্য।
এখন, গুরুত্বপূর্ণ প্রশ্নটি হল আমি কেন এইভাবে জিনিসগুলি করার জন্য জোর দিই। তিনটি প্রধান কারণ রয়েছে:
- এটি আমার অবজেক্টগুলিকে আরও আলগাভাবে জুড়ে রাখে। আমার অবজেক্টগুলি অন্যান্য বস্তুগুলিকে আবদ্ধ করতে পারে তবে তারা কখনই কলারের প্রসঙ্গে নির্ভর করবে না এবং প্রসঙ্গটি কখনই এমপ্ল্যাপুলেটেড অবজেক্টের উপর নির্ভর করবে না।
- এটি আমার নিয়ন্ত্রণ প্রবাহকে যুক্তিযুক্তভাবে সহজ রাখে। এটি ধরে নিতে পেরে খুব ভাল লাগল যে
self
কোনও পদ্ধতি কার্যকর করার সময় কেবলমাত্র কোডটি অভ্যন্তরীণ অবস্থার পরিবর্তন করতে পারে তা হ'ল একটি পদ্ধতি এবং অন্য কোনও নয়। এটি একই ধরণের যুক্তি যা সমবর্তী বস্তুগুলিতে মিটেক্স লাগাতে পারে।
- এটি আমার অবজেক্টগুলির এনক্যাপসুলেটেড ডেটাতে আক্রমণকারীদের রক্ষা করে। আক্রমণকারীদের উপর নির্ভর করার জন্য পাবলিক পদ্ধতিগুলি অনুমোদিত হয় এবং যদি কোনও পদ্ধতি বহিরাগতভাবে বলা যেতে পারে এবং অন্যটি ইতিমধ্যে কার্যকর করা হয় তবে এই আক্রমণকারীদের লঙ্ঘন করা যেতে পারে।
আমি কলব্যাকের সমস্ত ব্যবহারের বিরুদ্ধে নই। কখনই "কলকারীকে ফোন করা" না করার বিষয়ে আমার নীতিমালার সাথে তাল মিলিয়ে যদি কোনও বস্তু A বি তে কোনও পদ্ধতি আহ্বান করে এবং তাতে একটি কলব্যাক পাস করে, কলব্যাক এ এর অভ্যন্তরীণ অবস্থার পরিবর্তন করতে পারে না এবং এর মধ্যে ক এবং আ দ্বারা আবৃত বস্তুগুলি অন্তর্ভুক্ত রয়েছে এ এর প্রসঙ্গে বস্তু অন্য কথায়, কলব্যাক কেবল বি দ্বারা প্রদত্ত বস্তুর জন্য পদ্ধতিগুলি আহ্বান করতে পারে call কলব্যাক, বাস্তবে, বি এর একই বিধিনিষেধের অধীনে।
বেঁধে দেওয়ার এক শেষ looseিলে শেষটি হ'ল আমি যে আংশিক ক্রমটি সম্পর্কে কথা বলছি তা নির্বিশেষে আমি কোনও খাঁটি ফাংশন প্রার্থনার অনুমতি দেব। খাঁটি ফাংশনগুলি এমন পদ্ধতিগুলির থেকে কিছুটা পৃথক যে তারা পরিবর্তন করতে পারে না বা পরিবর্তিত অবস্থা বা পার্শ্ব প্রতিক্রিয়াগুলির উপর নির্ভর করতে পারে, তাই তাদের বিভ্রান্তিকর বিষয়ে কোনও উদ্বেগ নেই।