বিগত কয়েক বছরে, আমি যে ভাষাগুলি ব্যবহার করতে চাইছি সেগুলি আরও বেশি "কার্যকরী" হয়ে উঠছে। আমি এখন এমন ভাষা ব্যবহার করি যা "হাইব্রিড" ধরণের: সি #, এফ #, স্কালা। আমি আমার অ্যাপ্লিকেশনটি ক্লাসগুলি ব্যবহার করে ডিজাইন করতে চাই যা ডোমেন অবজেক্টগুলির সাথে সামঞ্জস্যপূর্ণ হয় এবং কার্যকরী বৈশিষ্ট্যগুলি ব্যবহার করে যেখানে এটি কোডিং সহজ করে তোলে, আরও বেশি মেলামেশা এবং সুরক্ষিত করে তোলে (বিশেষত সংগ্রহের সময় পরিচালনা করার সময় বা ফাংশনগুলি পাস করার সময়)।
যাইহোক দুটি বিশ্ব "সংঘাত" যখন নকশার নকশাগুলি আসবে। সম্প্রতি যে নির্দিষ্ট উদাহরণটির মুখোমুখি হয়েছিল তা হ'ল পর্যবেক্ষক নিদর্শন। আমি চাই যে কোনও প্রযোজক যখন কোনও আইটেম তৈরি বা পরিবর্তিত হবে তখন অন্য কিছু কোড ("ভোক্তা / পর্যবেক্ষক", একটি ডিবি স্টোরেজ, লগার এবং আরও কিছু) অবহিত করুন।
আমি প্রথমদিকে এটি "কার্যকরী" করেছিলাম:
producer.foo(item => { updateItemInDb(item); insertLog(item) })
// calls the function passed as argument as an item is processed
তবে আমি এখন ভাবছি যে আমার আরও "OO" পদ্ধতির ব্যবহার করা উচিত:
interface IItemObserver {
onNotify(Item)
}
class DBObserver : IItemObserver ...
class LogObserver: IItemObserver ...
producer.addObserver(new DBObserver)
producer.addObserver(new LogObserver)
producer.foo() //calls observer in a loop
দুটি পদ্ধতির প্রো এবং কন কোনটি? আমি একবার কোনও এফপি গুরুকে বলতে শুনেছিলাম যে কেবল ভাষার সীমাবদ্ধতার কারণে নকশার প্যাটার্নগুলি রয়েছে এবং সে কারণেই কার্যকরী ভাষায় খুব কম রয়েছে। সম্ভবত এটি এর উদাহরণ হতে পারে?
সম্পাদনা: আমার নির্দিষ্ট দৃশ্যে আমার এটির দরকার নেই, তবে .. আপনি কীভাবে কার্যকরীভাবে "পর্যবেক্ষক" অপসারণ এবং সংযোজন বাস্তবায়ন করবেন? (অর্থাৎ আপনি কীভাবে সমস্ত কার্যকারিতাটি প্যাটার্নে প্রয়োগ করবেন?) স্রেফ একটি নতুন ফাংশন পাস করা, উদাহরণস্বরূপ?