আপনার ইন্টারফেসগুলির একটি খুব সু-সংজ্ঞায়িত সেট থাকা উচিত যা বার্তাগুলি প্রেরণ বা গ্রহণ করার অনুমতিপ্রাপ্ত - ইভেন্ট ইভেন্টের জন্য তাদের রেফারেন্স দেওয়া তুচ্ছ হওয়া উচিত। যদি এটি না হয়, বা যদি আপনি মনে করেন যে ইভেন্টের শিডিউলারটিকে "অনেকগুলি" স্বতন্ত্র ধরণের কাছে প্রেরণ করা জড়িত, তবে আপনার নিজের হাতে একটি বৃহত্তর ডিজাইনের সমস্যা হতে পারে (একটি প্রমিসিউস নির্ভরতা, যা সিঙ্গেলনগুলি বাড়িয়ে তোলে, সমাধান করে না )।
মনে রাখবেন যে ইন্টারফেসগুলির প্রয়োজন অনুসারে শিডিয়ুলার পাস করার কৌশলটি " নির্ভরতা ইনজেকশন " এর একটি রূপ হিসাবে আপনি এই ক্ষেত্রে কোনও নতুন নির্ভরতা ইনজেকশনের ক্ষেত্রে নন । এটি আপনার সিস্টেমে ইতিমধ্যে থাকা নির্ভরতা, তবে আপনি এখন এটিকে স্পষ্ট করে তুলছেন (বনাম সিঙ্গলটনের অন্তর্নিহিত নির্ভরতা)। থাম্বের নিয়ম হিসাবে, স্ব-ডকুমেন্টিং বেশি হওয়ায় সুস্পষ্ট নির্ভরতা আরও বেশি পছন্দনীয়।
আপনি একে অপরের কাছ থেকে ইভেন্টের সময়সূচীটির গ্রাহকদের ডিক্লোল করে নিজেকে আরও নমনীয় করে তোলেন (যেহেতু তারা প্রয়োজনীয়ভাবে একই শিডিয়ুলারের সাথে আবদ্ধ নয়), যা স্থানীয় ক্লায়েন্ট / সার্ভার সেটআপগুলি বা অন্যান্য সংখ্যক বিকল্পের পরীক্ষার জন্য বা অনুকরণের জন্য কার্যকর হতে পারে - আপনার এই অন্যান্য বিকল্পের প্রয়োজন নাও লাগতে পারে, তবে কৃত্রিমভাবে এগুলি থেকে নিজেকে সীমাবদ্ধ করার জন্য আপনি কোনও প্রচেষ্টা ব্যয় করেননি, এটি একটি উপকার।
সম্পাদনা: আমি যখন প্রায় শিডিয়ুলারটি পাশ করার বিষয়ে কথা বলি তখন সমস্তটাই হ'ল: যদি আপনার কাছে এমন কোনও গেম উপাদান রয়েছে যা সংঘর্ষের প্রতিক্রিয়া জানাতে দায়ী হয় তবে এটি সম্ভবত কিছু সংঘর্ষের প্রতিক্রিয়াকারী কারখানার মাধ্যমে তৈরি হয়েছে যা আপনার পদার্থবিজ্ঞানের স্তরটির অংশ। যদি আপনি কোনও শিডিয়ুল উদাহরণ দিয়ে কারখানাটি নির্মাণ করেন, এটি তারপরে তৈরি করা কোনও প্রতিক্রিয়াকারীদের কাছে সেই উদাহরণটি পাঠিয়ে দিতে পারে, যা এরপরে ইভেন্টগুলি বাড়াতে (বা সম্ভবত অন্যান্য ইভেন্টের সদস্যতা নিতে পারে) এটি ব্যবহার করতে পারে।
class CollisionResponderFactory {
public CollisionResponderFactory (EventScheduler scheduler) {
this.scheduler = scheduler;
}
CollisionResponder CreateResponder() {
return new CollisionResponder(scheduler);
}
EventScheduler scheduler;
}
class CollisionResponder {
public CollisionResponder (EventScheduler scheduler) {
this.scheduler = scheduler;
}
public void OnCollision(GameObject a, GameObject b) {
if(a.IsBullet) {
scheduler.RaiseEvent(E_BIG_EXPLOSION);
}
}
EventScheduler scheduler;
}
এটি স্পষ্টতই একটি মারাত্মক সঙ্কুচিত এবং সরল উদাহরণ, যেহেতু আমি জানি না যে আপনার গেমের অবজেক্টের মডেল কী; এটি ইভেন্টের শিডিয়ুলারের উপর নির্ভরশীলতা স্পষ্ট করে তুলে ধরে এবং আরও এনক্যাপসুলেশনের জন্য কিছু সম্ভাবনা দেখায় (যদি প্রয়োজন মতো একই ধারণাগত স্তরে উচ্চতর স্তরের সংঘর্ষের প্রতিক্রিয়া সিস্টেমের মাধ্যমে যোগাযোগ করা হয় তবে আপনাকে জবাবদিহিদের শিডিয়ুলারটি পাস করার প্রয়োজন হবে না) ফ্যাক্টরি যা শিডিয়ুলারের মাধ্যমে ইভেন্ট উত্থাপনের বাদাম এবং বল্টের সাথে ডিল করে This এটি প্রতিটি পৃথক প্রতিক্রিয়াশীল প্রয়োগকে ইভেন্ট প্রেরণের সিস্টেমের বাস্তবায়ন বিশদ থেকে আলাদা করে দেবে, যেমন কোন নির্দিষ্ট ইভেন্টের সংঘর্ষে উত্থাপন করা উচিত যা আপনার সিস্টেমের জন্য আদর্শ হতে পারে - - অথবা না).