পেশাদার প্রোগ্রামাররা কীভাবে রায় ঘোষণা করবেন যে ওওপিতে যাবেন কিনা? এটা আমার জন্য সত্যিই সহায়ক হবে।
আমার জন্য, দুটি সিদ্ধান্ত পয়েন্ট আছে। প্রথমত, কখনও কখনও এটি শুরুতে সুস্পষ্ট হবে। অনেকগুলি অনুরূপ প্রকারের রয়েছে যা সমস্ত সাধারণ পদ্ধতি ভাগ করে নেয় যা তাদের প্রয়োগের বিশদগুলিতে ব্যাপকভাবে পৃথক হয়। উদাহরণস্বরূপ, আমি একটি ওয়ার্কফ্লো সিস্টেম তৈরি করছিলাম এবং আমার স্বেচ্ছাসেবী কর্মগুলি কার্যকর করার দক্ষতার প্রয়োজন ছিল। টাস্কটি চালানোর জন্য, আমি একটি বেস ক্লাস প্রয়োগ করেছি যা প্রতিটি কাজ একটি Execute()
বিমূর্ত পদ্ধতি দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল । উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলি বাস্তবায়ন সরবরাহ করেছিল, তবে কী ধরণের কাজ পরিচালিত হচ্ছে তা সম্পর্কে কিছু না জেনে ওয়ার্কফ্লো সিস্টেম কার্যকর করতে শুরু করতে পারে।
যদিও বেশিরভাগ প্রকল্পগুলি পরিষ্কার নয়। দ্বিতীয় সিদ্ধান্তের বিষয়টি হ'ল যখন প্রকল্পের কোনও উপসেট যদি তত্ক্ষণাত বিবৃতি বা স্যুইচ-কেস স্টেটমেন্টগুলির একটি বিশাল জঞ্জালে পরিণত হয় এবং বিশেষত যখন সেই-পরে বিবৃতিগুলি সঠিকভাবে চালানোর জন্য প্রচুর সেটআপ কোডের প্রয়োজন হয়। আমি নিজেকে অর্জন করার চেষ্টা করছি তার যুক্তিটি হারাতে শুরু করি এবং কোডটি ভঙ্গুর মনে হতে শুরু করে। এই সময়ে, এটি সাধারণত একটি চিহ্ন যে নির্দিষ্ট বাস্তবায়ন সহ বেস ক্লাসে কোডটি রিফ্যাক্টর করার সময় is
ক্রিয়ামূলক শৈলীর বিপরীতে কোনও অবজেক্ট-ওরিয়েন্টেড স্টাইলে স্যুইচ করার একটি বড় অংশ যদি-তবে বিবৃতিগুলিকে "এই ক্রিয়াটি চালান" বিবৃতিতে রূপান্তরিত করে। তারপরে বিবৃতিগুলির একটি বিশাল সংখ্যার পরিবর্তে, আপনি কেবল কোডটি তার ক্রিয়াকলাপ চালিয়ে যেতে বলুন। কোন ক্রিয়াটি আসলে চালিত হয় তা আপনার সরবরাহিত প্রয়োগের উপর নির্ভর করে।
উদাহরণস্বরূপ, এখানে সি #-স্টাইল সিউডোকোডে কার্যকরী শৈলী:
if ( action == "email" ) {
callEmailFunction(userInfo);
}
else if ( action == "sms" ) {
callSmsFunction(userInfo);
}
else if ( action == "web" ) {
endpoint = "http://127.0.0.1/confirm";
confirmWeb(endpoint, userinfo);
}
...
তবে আপনি এটি আবার কিছু লিখতে পারেন:
interface IConfirmable {
void Confirm(UserInfo userinfo);
}
public class ConfirmEmail : IConfirmable {
public void Confirm(UserInfo userinfo) {
// do the appropriate thing to confirm via email
}
}
public class ConfirmSms : IConfirmable {
public void Confirm(UserInfo userinfo) {
// do the appropriate thing to confirm via email
}
}
public class ConfirmWeb : IConfirmable {
// this is a constructor
public ConfirmWeb(string endpoint) {
...
}
public void Confirm(UserInfo userinfo) {
// do the appropriate thing to confirm via web
}
}
এবং তারপরে কোডটি নিজেই:
// An implementation that decides which implementation of the base class to use
// This replaces the if-then statements in the functional programmming.
IConfirmable confirmer = ConfirmerFactory.GetConfirmer();
// get the userinfo however you get it,
// which would be the same way you get it in the functional example.
UserInfo userinfo = ...;
// perform the action.
confirmer.Confirm(userinfo);
এখন, যখন-যদি-এর ভিতরে খুব সামান্য কোড থাকে, তখন কোনও লাভ না পাওয়ার জন্য এটি অনেক কাজের মনে হয়। এবং যদি তখন-তে খুব সামান্য কোড থাকে তবে এটি সঠিক: এটি কোডের পক্ষে অনেক কাজ যা বোঝা শক্ত।
বস্তু-ভিত্তিক স্টাইলটি তখনই জ্বলজ্বল করে যখন আপনার Confirm()
সঞ্চালনের প্রয়োজন কেবল সেই পদ্ধতির চেয়ে একাধিক ক্রিয়া । হতে পারে আপনার প্রাথমিক সূচনা, তিন বা ততোধিক ক্রিয়াকলাপ যা চালানো যেতে পারে এবং একটি Cleanup()
পদ্ধতি method বেস অ্যালগরিদমটি অভিন্ন, কেবলমাত্র এটি একটি সাধারণ বেস শ্রেণি প্রয়োগ করে এমন উপযুক্ত বস্তুগুলিতে কল করে implement এখন আপনি অবজেক্ট ওরিয়েন্টেড স্টাইলে একটি আসল উপকারিতা দেখতে শুরু করেছেন: বেস অ্যালগরিদমটি পড়ার চেয়ে অনেক সহজ, যদি এটি প্রতিটি ধাপে-তাহলে বিবৃতিগুলি পরীক্ষা করে দেখছিল।