এমন কোন "কোডের গন্ধ" রয়েছে যা এমন একটি লক্ষণ যা ইভেন্ট শ্রোতার মডেলটির জন্য প্রয়োজন?


10

কোনও কোড বেসের লক্ষণগুলি কী কী যা ইঙ্গিত করে যে ইভেন্ট-শ্রোতার পদ্ধতির প্রয়োজন?

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

উত্তর:


8

ইভেন্ট / লিসেনার aproach চেষ্টা এড়াতে আঁট কাপলিং , তাই সমস্ত কোড গন্ধ পাচ্ছি যে ইঙ্গিত appoach নির্দেশ করবে।

তার উপর ভিত্তি করে, আমি নিম্নলিখিত উপসর্গগুলি পরামর্শ দিব:

  • বড় কন্সট্রাক্টর , যেমন প্রতিটি বস্তুর প্রতিটি অন্যান্য বস্তু জানতে হবে, এবং এটি ছাড়া কাজ করতে পারে না। obj.set_dependecy(x)কনস্ট্রাক্টর কল অনুসরণ করার সাথে সাথেই অনেকে ছদ্মবেশ ধারণ করেছেন ।

  • দ্বিপাক্ষিক নির্ভরতা , কারণ ইভেন্টগুলি ছাড়াই, অগত্যা ভাষায়, তথ্যের প্রবাহটি মূলত 'পুশ' (কারওর পদ্ধতিতে কল করা)

  • 'জ্ঞানের শ্রেণিবিন্যাস' নির্ধারণ করা শক্ত । এটি দ্বি দ্বিভিত্তিক নির্ভরতা , কেবল অন্য ফোকাস: যদি সেখানে A থাকে, যা বি শোনে, A B কে জানে, কিন্তু B A- তে জানে না, তাই কিছু 'হায়রাচি' রয়েছে: কিছু বস্তু কিছুই জানে না, কেউ কেউ অন্যকেও জানে , ইত্যাদি উদাহরণস্বরূপ, এমভিসি প্রয়োগ করার সময় এটি: http://en.wikedia.org/wiki/Model_View_Controller , মডেল কেবল নিজেই জানে, দৃশ্যটি মডেলটি জানে, এবং নিয়ামক ভিউ এবং মডেল জানেন knows


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

তুমি ঠিক বলছো. আমি এটি সনাক্তকরণের স্বাচ্ছন্দ্য দিয়ে আদেশ করার চেষ্টা করেছি এবং বড় নির্মাতারা এত সহজ, তারা নিয়মিত প্রকাশের দ্বারা ধরা পড়তে পারে।
কেপলা

6

যখন আপনি বার্তা / সিগন্যাল / ইভেন্টের সেটটিতে কী প্রতিক্রিয়া জানাতে পারেন বা না জানতে পারেন।

প্রায়শই এটি যখন আপনি "দুনিয়া" মডিউলে (একটি শ্রেণি বা শ্রেণীর একটি সিস্টেম) কিছু হ্যাপিং সম্পর্কে জানতে চান তবে আপনি কী বলা হয় তা নিয়ে মাথা ঘামাতে চান না।

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


3

আমি আপনার প্রশ্নটি পরিবর্তন করে বলব: যখন কোনও ইভেন্ট ভিত্তিক কোনও অবজেক্ট অরিয়েন্টেড অ্যাপ্লিকেশনটির সঠিক সমাধান না হয়? আমি মনে করি যে বেশিরভাগ ওও অ্যাপ্লিকেশনগুলি সেগুলি ইভেন্ট প্রযোজক এবং গ্রাহক হিসাবে ডিজাইন করা থাকলে উপকৃত হতে পারে।

শেষ অবধি, একটি "পদ্ধতি কল" আসলে কোনও বস্তুর কাছে পৌঁছে যাওয়া একটি বার্তা এবং বিষয়টি বার্তাটি দিয়ে কিছু করা এবং অপারেশন সম্পাদন করে কিনা তা সিদ্ধান্ত নেওয়ার জন্য বিষয়টি দায়ী। এটি জাভা হিসাবে দৃ strongly়ভাবে টাইপ করা ভাষায় খুব স্পষ্ট নয়, তবে এটি রুবির মতো গতিশীল ভাষায় আরও স্পষ্ট হয়ে ওঠে।

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

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

দুঃখিত, যদি আমি বেশি কিছু না বুঝি, আমি গত কয়েক মাস ধরে আশ্চর্যজনক ফলাফল নিয়ে এই নিদর্শনগুলি নিয়ে পরীক্ষা-নিরীক্ষা করছি, তবে আমি এখনও ধারণাগুলি এবং সেগুলি কতটা পৌঁছানোর তা বোঝার চেষ্টা করছি।


2

ইভেন্ট শ্রোতাদের (যেমন। পর্যবেক্ষক প্যাটার্ন) উপস্থিত না থাকলে আপনাকে কী করতে হবে তা ভেবে দেখুন।

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

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

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

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